我已经实践了java 9模块系统与Maven项目的集成。它似乎运行得很好,但我担心在java 9之前编译的maven模块的向后兼容性。
为了向后兼容,JPMS(Java Platform Module System)有自动模块的概念。在JPMS中,没有模块的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>在上述情况下,我们已经使用了以前的版本-模块-0.0.1快照,并希望在新的java 9 maven项目中使用该模块。
module new.module{
requires previous-version-module-0.0.1-SNAPSHOT
}但是它会发生编译错误或IDEA工具抛出错误。
我想知道如何使用maven jar文件,该文件是在java 9之前在java 9和maven集成项目中编译的。我搜索了一些额外的模块定义规则或maven插件,我找不到任何解决方案。
谢谢。
发布于 2017-08-07 10:11:07
如果模块名不明显,则可以使用jar --file=<jarfile> --describe-module查看派生名称。或者,使用--list-modules选项,即java -p <jarfile> --list-modules。
一旦您知道了模块的名称,那么您就使用了requires <module>,它应该可以工作。maven编译器插件在构建一个在源树中有一个模块info.java的项目时,将所有依赖于模块路径。
https://stackoverflow.com/questions/45538431
复制相似问题