JDK9 自动模块和 "Split Packages" 依赖项
JDK9 Automatic Modules and "Split Packages" Dependencies
我正在将 java 项目转换为使用模块。我的模块之一依赖于 hamcrest
库,它需要两个 jar 文件 hamcrest.core
和 hamcrest.library
。这两个 jar 文件都有 org.hamcrest
包。因此,当我的模块想要将这两个 jar 视为自动模块时,它会失败,因为模块路径中的两个模块不能具有同名的包。我搜索了很多,在 Whosebug 上找到了一些相关的东西。如果我不想重建这些依赖关系,我似乎有两个合理的选择:
- 使用我的构建自动化工具(maven)将两个 jar 合并为一个 jar。
- 以某种方式告诉 java 编译器这两个 jar 应该被视为一个自动模块。
所以这是我的问题:
- 这两个选项中的任何一个都可以吗?如果是,如何?
- 还有更好的选择吗?
提前致谢
好吧,我终于设法解决了这个问题:
- 创建一个名为
hamcrest-all
的新 Maven 模块并添加对 hamcrest-core
和 hamcrest-library
的依赖。
- 将
maven-assembly-plugin
添加到此模块并将 appendAssemblyId
设置为 false。
- 从其他 Maven 模块中删除对
hamcrest-core
和 hamcrest-library
的依赖,而是添加对 hamcrest-all
. 的依赖
- 在包含对
hamcrest-all
. 的依赖时排除 hamcrest-core
和 hamcrest-library
它实际做的是解压为 hamrest-all
创建的 jar 文件中的 hamcrest-core
和 hamcrest-library
。而且因为 JMPS 将每个 jar 文件视为一个模块,所以问题就消失了:)
我正在将 java 项目转换为使用模块。我的模块之一依赖于 hamcrest
库,它需要两个 jar 文件 hamcrest.core
和 hamcrest.library
。这两个 jar 文件都有 org.hamcrest
包。因此,当我的模块想要将这两个 jar 视为自动模块时,它会失败,因为模块路径中的两个模块不能具有同名的包。我搜索了很多,在 Whosebug 上找到了一些相关的东西。如果我不想重建这些依赖关系,我似乎有两个合理的选择:
- 使用我的构建自动化工具(maven)将两个 jar 合并为一个 jar。
- 以某种方式告诉 java 编译器这两个 jar 应该被视为一个自动模块。
所以这是我的问题:
- 这两个选项中的任何一个都可以吗?如果是,如何?
- 还有更好的选择吗?
提前致谢
好吧,我终于设法解决了这个问题:
- 创建一个名为
hamcrest-all
的新 Maven 模块并添加对hamcrest-core
和hamcrest-library
的依赖。 - 将
maven-assembly-plugin
添加到此模块并将appendAssemblyId
设置为 false。 - 从其他 Maven 模块中删除对
hamcrest-core
和hamcrest-library
的依赖,而是添加对hamcrest-all
. 的依赖
- 在包含对
hamcrest-all
. 的依赖时排除
hamcrest-core
和 hamcrest-library
它实际做的是解压为 hamrest-all
创建的 jar 文件中的 hamcrest-core
和 hamcrest-library
。而且因为 JMPS 将每个 jar 文件视为一个模块,所以问题就消失了:)