【问题标题】:When Java 9 module system integrate into Maven, how to handle automatic moduleJava 9 模块系统集成到 Maven 时,如何处理自动模块
【发布时间】:2017-08-07 02:00:42
【问题描述】:

我已经练习过 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插件,我找不到任何解决方案。

谢谢。

【问题讨论】:

  • 你是如何在 Maven 中进行集成的?我建议不要使用自动模块...最好添加一个 module-info.java 文件并正确命名您的模块.... module-info.java 中的用法从不包含版本....此外,您是什么意思是“maven jar文件它的结构不同”?您是在谈论 jmod 文件吗?见github.com/khmarbaise/jdk9-jlink-jmod-example/tree/master/…
  • "maven jar file it not same structure"表示jar文件(在maven上编译)包含maven依赖的META-INFO目录。

标签: maven java-9


【解决方案1】:

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

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

【讨论】:

  • 感谢您的回答。
  • 我会尽力为您解答。是否有任何 pom.xml 声明支持描述您所说的模块名称功能?
  • mvn dependency:list 还显示每个 jar 的模块名称
猜你喜欢
  • 1970-01-01
  • 2018-10-25
  • 2017-10-07
  • 2019-12-06
  • 2019-05-08
  • 1970-01-01
  • 1970-01-01
  • 2018-04-06
  • 1970-01-01
相关资源
最近更新 更多