【问题标题】:JDK9 Automatic Modules and "Split Packages" DependenciesJDK9 自动模块和“拆分包”依赖项
【发布时间】:2018-11-11 03:37:12
【问题描述】:

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

  1. 使用我的构建自动化工具(maven)将两个 jar 合并到一个 jar。
  2. 不知何故告诉 java 编译器这两个 jar 应该被视为一个单独的自动模块。

所以这是我的问题:

  • 这两个选项是否可行?如果是,怎么做?
  • 还有更好的选择吗?

提前致谢

【问题讨论】:

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-17
    • 2016-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    • 2017-01-09
    相关资源
    最近更新 更多