首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JPMS支持模块版本吗?

JPMS支持模块版本吗?
EN

Stack Overflow用户
提问于 2018-01-08 13:19:04
回答 3查看 1.3K关注 0票数 11

我认为JPMS不支持模块版本。但是,当我执行java --list-modules时,我有以下输出:

代码语言:javascript
运行
复制
java.activation@9
java.base@9
java.compiler@9
java.corba@9
java.datatransfer@9
java.desktop@9
java.instrument@9 
....

所以,我不明白这个@9是什么。是这个版本还是什么?如果JPMS支持模块版本,我可以在模块A的模块信息中设置,A模块需要特定版本的模块B吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-01-08 13:49:50

我不明白这“9”是什么。是这个版本还是什么?

是的,这是模块的版本。

如果JPMS支持模块版本,我可以在模块A的模块信息中设置,A模块需要特定版本的模块B吗?

不,您不能在另一个模块的声明中引用模块的特定版本。我相信这一点在模块System#Module声明的状态中总是很清楚地提到

模块的声明不包括版本字符串,也不包括它所依赖的模块的版本字符串的约束。这是有意的,因为解决http://openjdk.java.net/projects/jigsaw/spec/reqs/02#version-selection问题不是模块系统的目标,最好留给构建工具和容器应用程序。

票数 8
EN

Stack Overflow用户

发布于 2018-01-09 11:43:41

为了更好地了解现有的@9信息:

JVMS 9在module_version_index结构中包含一个字段Module_attribute,即类文件格式支持存储模块的版本字符串,甚至定义了一个requires_version_index,但我不知道任何与评估这个版本有关的规范,使这些数据在此时提供了纯粹的信息。

有关模块版本的当前状态(截至Java9GA)的更多信息可以在发行摘要中找到。版本的格式在ModuleDescriptor.Version API中定义。

票数 7
EN

Stack Overflow用户

发布于 2018-02-25 15:22:16

Java模块系统无意解决版本选择或验证问题。

但是,它确实支持将版本信息添加到通过module提供的模块jar中。

类似地,另一个模块上的“requires”子句将包含它所针对的依赖项的版本。一个先决条件是另一个模块需要包含版本号。

通过API提供这两个版本可以让其他框架验证由不同模块组成的应用程序是否具有兼容版本(例如,基于语义版本控制)。

在maven构建中,java‘jar’工具允许将project.version添加到模块化jar中,如下所示:

代码语言:javascript
运行
复制
<plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.6.0</version>
            <executions>
                <execution>
                    <id>add-version-to-jar</id>
                    <phase>package</phase>
                    <goals>
                        <goal>exec</goal>
                    </goals>
                    <configuration>
                        <executable>jar</executable>
                        <workingDirectory>${project.build.directory}</workingDirectory>
                        <arguments>
                            <argument>--update</argument>
                            <argument>--verbose</argument>
                            <argument>--module-version</argument>
                            <argument>${project.version}</argument>
                            <argument>--file</argument>
                            <argument>${project.build.finalName}.jar</argument>
                            <argument>-C</argument>
                            <argument>${project.build.outputDirectory}</argument>
                            <argument>.</argument>
                        </arguments>
                    </configuration>
                </execution>
            </executions>
</plugin>

显示这一点的更详细的描述和代码可以在

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48151160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档