我已经练习了java 9模块系统与Maven项目的集成。它似乎运行良好,但我担心在java 9之前编译的maven模块的向后兼容性。
为了向后兼容,JPMS(Java平台模块系统)具有自动模块概念。在JPMS中,没有module-info.java的Jar文件被视为自动模块,其他java模块可以使用其文件名作为模块名称来使用此jar文件。
如果与maven项目集成,我认为需要额外支持JPMS向后兼容性。 首先,基本jar文件和maven jar文件结构不一样。 第二,maven jar文件命名与规则不兼容可以兼容JPMS模块命名规则。见下面的例子。
<artifactId>previous-version-module</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
在上面的例子中,我们已经使用了previous-version-module-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插件,我找不到任何解决方案。
感谢。
答案 0 :(得分:6)
如果模块名称不明显,则可以使用jar --file=<jarfile> --describe-module
查看派生名称。或者,使用--list-modules
选项,即java -p <jarfile> --list-modules
。
一旦知道了模块名称,就可以使用requires <module>
,它应该可以使用。在构建源树中具有module-info.java的项目时,maven-compiler-plugin将所有依赖项放在模块路径上。