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

时间:2018-11-11 03:37:12

标签: java maven java-9 hamcrest java-module

我正在将Java项目转换为使用模块。我的一个模块依赖于hamcrest库,它需要两个jar文件hamcrest.corehamcrest.library。这两个jar文件都具有org.hamcrest软件包。因此,当我的模块要将这两个jar视为自动模块时,它会失败,因为模块路径中的两个模块不能具有相同名称的软件包。我进行了大量搜索,发现了关于stackoverflow的一些相关内容。如果我不想重建那些依赖关系,看来我有两个合理的选择:

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

这是我的问题:

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

预先感谢

1 个答案:

答案 0 :(得分:2)

好吧,我终于设法解决了这个问题:

  1. 创建一个名为hamcrest-all的新Maven模块,并添加对hamcrest-corehamcrest-library的依赖关系。
  2. maven-assembly-plugin设置为false,将appendAssemblyId添加到此模块。
  3. 从其他Maven模块中删除对hamcrest-corehamcrest-library的依赖,而是向hamcrest-all添加依赖。
  4. 包括对hamcrest-core的依赖性时,排除hamcrest-libraryhamcrest-all

它的实际作用是将hamcrest-corehamcrest-library解压缩到为hamrest-all创建的jar文件中。而且由于JMPS将每个jar文件都视为一个模块,所以问题就消失了:)