Java 9模块系统集成到Maven中时,如何处理自动模块

When Java 9 module system integrate into Maven, how to handle automatic module

我已经实践过java9个模块系统与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>

在上述情况下,我们已经使用了 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 插件,我找不到任何解决方案。

谢谢。

如果模块名称不明显,那么您可以使用 jar --file=<jarfile> --describe-module 查看派生名称。或者,使用 --list-modules 选项,即 java -p <jarfile> --list-modules.

一旦您知道了模块名称,您就可以使用 requires <module> 它应该可以工作了。 maven-compiler-plugin 在构建源代码树中具有模块-info.java 的项目时将所有依赖项放在模块路径上。