为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

汪汪一只猫 2022-01-12 14:43:39
我正在将一个 java 项目转换为使用模块。我的一个模块依赖于hamcrest库,它需要 jar 文件hamcrest.core和hamcrest.library. 这两个jar文件都有org.hamcrest包。因此,当我的模块想要将这两个 jar 视为自动模块时,它会失败,因为模块路径中的两个模块不能有同名的包。我搜索了很多,在stackoverflow上找到了一些相关的东西。如果我不想重建这些依赖项,我似乎有两个合理的选择:使用我的构建自动化工具(maven)将两个 jar 合并到一个 jar 中。不知何故告诉java编译器这两个jar应该被视为一个单独的自动模块。所以这是我的问题:这两个选项中的任何一个都可能吗?如果是,如何?有没有更好的选择?提前致谢
查看完整描述

1 回答

?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

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

  1. 创建一个新的 maven 模块,hamcrest-all并在hamcrest-core和上添加依赖项hamcrest-library

  2. 添加maven-assembly-plugin到此模块并appendAssemblyId设置为 false。

  3. 删除hamcrest-corehamcrest-library其他 maven 模块的依赖关系,而是将依赖关系添加到hamcrest-all.

  4. excludehamcrest-corehamcrest-librarywhen 包括对hamcrest-all.

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


查看完整回答
反对 回复 2022-01-12
  • 1 回答
  • 0 关注
  • 143 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信