我已經實踐了與Maven項目的Java 9模塊系統集成。它似乎工作得很好,但我擔心在java 9之前編譯的maven模塊的向後兼容性。當Java 9模塊系統集成到Maven中時,如何處理自動模塊
爲了向後兼容,JPMS(Java平臺模塊系統)具有自動模塊概念。在JPMS中,沒有module-info.java的Jar文件被認爲是Automatic Module,其他的Java模塊可以使用這個jar文件作爲模塊名。
在與maven項目集成的情況下,我認爲需要額外支持JPMS向後兼容性。首先,基本的jar文件和maven jar文件結構不一樣。其次,maven jar文件的命名與規則不兼容,可以兼容JPMS模塊的命名規則。看下面的例子。
<artifactId>previous-version-module</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
在上述情況下,我們已經使用了先前版本的模塊-0.0.1-SNAPSHOT並希望在新的Java 9 Maven項目使用這個模塊。
module new.module{
requires previous-version-module-0.0.1-SNAPSHOT
}
但它發生編譯錯誤或IDEA工具拋出錯誤。
我想知道如何在java 9和maven集成項目中使用java 9之前編譯的maven jar文件。 我搜索了一些額外的模塊定義規則或maven插件,我找不到任何解決方案。
謝謝。
你怎麼沒有在Maven集成?我建議阻止使用自動模塊...更好地添加一個module-info.java文件並正確命名您的模塊....在module-info.java中的用法從不包含版本....此外,你是什麼意思是「maven jar文件它不一樣的結構」?你在談論jmod文件嗎?請參閱https://github.com/khmarbaise/jdk9-jlink-jmod-example/tree/master/maven-example – khmarbaise
「maven jar文件它不是相同的結構」意味着jar文件(在maven上編譯)包括META-INFO目錄爲maven依賴。 –