簡體   English   中英

JPMS 是否支持模塊版本?

[英]Does JPMS support module version?

我認為 JPMS 不支持模塊版本。 但是,當我執行java --list-modules我有以下輸出:

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嗎?

我無法理解這個@9 是什么。 是這個版本還是什么?

是的,它是模塊的版本。

如果JPMS支持模塊版本,我可以在模塊A的模塊信息中設置,模塊A需要某個版本的模塊B嗎?

不,您不能在另一個模塊的聲明中引用模塊的特定版本。 我相信在The State of the Module System#Module Declarations 中總是清楚地提到這一點

模塊的聲明不包括版本字符串,也不包括對其所依賴的模塊的版本字符串的約束。 這是有意為之,因為解決版本選擇問題並不是模塊系統的目標,最好留給構建工具和容器應用程序。

要更多地了解現有的@9信息:

JVMS 9 在Module_attribute結構中包含一個字段module_version_index ,即類文件格式支持存儲模塊的版本字符串,甚至定義了requires_version_index ,但我不知道任何與評估此版本相關的規范,呈現這個在這一點上,數據純粹是提供信息。

有關模塊版本的當前狀態(從 Java 9 GA 開始)的更多信息可以在問題摘要中找到。 版本的格式在ModuleDescriptor.Version API 中定義。

Java 模塊系統無意解決版本選擇或驗證問題。

但是,它確實支持將版本信息添加到可通過模塊 API 獲得的模塊 jar。

類似地,另一個模塊上的“requires”子句將包含編譯它所針對的依賴項的版本。 先決條件是另一個模塊需要包含版本號。

通過 API 提供這兩個版本使得其他框架可以驗證由不同模塊組成的應用程序是否具有兼容版本(例如,基於語義版本控制)。

在 Maven 構建中,java“jar”工具的以下用法允許將 project.version 添加到模塊化 jar:

<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>

可以在以下位置找到更詳細的描述和代碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM