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

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

  1. 使用我的构建自动化工具(maven)将两个 jar 合并到一个 jar 中。

  2. 不知何故告诉java编译器这两个jar应该被视为一个单独的自动模块。

所以这是我的问题:

  • 这两个选项中的任何一个都可能吗?如果是,如何?

  • 有没有更好的选择?

提前致谢


汪汪一只猫
浏览 144回答 1
1回答

拉风的咖菲猫

好的,我终于设法像这样解决它:创建一个新的 maven 模块,hamcrest-all并在hamcrest-core和上添加依赖项hamcrest-library。添加maven-assembly-plugin到此模块并appendAssemblyId设置为 false。删除hamcrest-core与hamcrest-library其他 maven 模块的依赖关系,而是将依赖关系添加到hamcrest-all.excludehamcrest-core和hamcrest-librarywhen 包括对hamcrest-all.它实际上所做的是解压缩hamcrest-core并hamcrest-library在为hamrest-all. 而且因为每个 jar 文件都被 JMPS 视为一个模块,所以问题就消失了:)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java