gpt4 book ai didi

java - JDK9 自动模块和 "Split Packages"依赖

转载 作者:行者123 更新时间:2023-12-04 01:50:41 26 4
gpt4 key购买 nike

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

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

所以这是我的问题:

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

提前致谢

最佳答案

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

  1. 创建一个名为 hamcrest-all 的新 Maven 模块并添加对 hamcrest-core 的依赖和 hamcrest-library .
  2. 添加maven-assembly-plugin使用 appendAssemblyId 到此模块设置为假。
  3. 删除对hamcrest-core的依赖和 hamcrest-library来自其他 Maven 模块,而是将依赖项添加到 hamcrest-all .
  4. 排除 hamcrest-corehamcrest-library当包含对 hamcrest-all 的依赖时.

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

关于java - JDK9 自动模块和 "Split Packages"依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53245628/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com