JDK9 自动模块和 "Split Packages" 依赖项

JDK9 Automatic Modules and "Split Packages" Dependencies

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

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

所以这是我的问题:

提前致谢

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

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

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