JDK9 自动模块和“拆分包”依赖关系

Fer*_*eri 4 java hamcrest maven java-9 java-module

我正在将 java 项目转换为使用模块。我的模块之一依赖于hamcrest库,它需要 jar 文件hamcrest.corehamcrest.library. 这两个jar文件都有org.hamcrestpackage.json。因此,当我的模块想要将这两个 jar 视为自动模块时,它会失败,因为模块路径中的两个模块不能具有相同名称的包。我查了很多资料,在 stackoverflow 上找到了一些相关的东西。如果我不想重建这些依赖项,我似乎有两个合理的选择:

  1. 使用我的构建自动化工具(maven)将两个 jar 合并为一个 jar。
  2. 以某种方式告诉java编译器这两个jar应该被视为单个自动模块。

这是我的问题:

  • 这两个选项中的任何一个都可能吗?如果是,怎么办?
  • 还有更好的选择吗?

提前致谢

Fer*_*eri 6

好吧,我终于设法像这样解决它:

  1. 创建一个名为 的新 Maven 模块hamcrest-all,并添加对hamcrest-core和 的依赖项hamcrest-library
  2. 添加maven-assembly-plugin到此模块并appendAssemblyId设置为 false。
  3. hamcrest-core删除与其他 Maven 模块的依赖关系hamcrest-library,并将依赖关系添加到hamcrest-all.
  4. 当包含对 的依赖时排除hamcrest-core和。hamcrest-libraryhamcrest-all

它实际上所做的是解压hamcrest-corehamcrest-library放入为hamrest-all. 而且因为 JMPS 将每个 jar 文件视为一个模块,所以问题就消失了:)