我已经实践了与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依赖。 –