在Maven和Java 9

时间:2018-04-12 20:30:39

标签: java maven java-9 java-module

我正在努力使我的项目为Java 9做好准备,并且我遇到了拆分包(共享相同包的工件)的问题。

我的应用程序依赖于至少两个第三方遗留工件(使用Java< 9构建)。当我使用Java 9运行Maven时,我得到:

[ERROR] module myapp reads package P from both A and B

这是正确的,因为包P存在于A.jar和B.jar中,但没有重叠的类。我知道这是Java 9的一个问题,我在https://blog.codefx.org/java/java-9-migration-guide/#fixes-2中研究了建议的解决方案。总结它是&#34;修复你的代码&#34; (不可能,因为第三方JAR)或&#34;使用命令行选项运行&#34; (最有趣的可能是--patch-module <package>=<path-to-jar>)。 还有另一个想法here,其中说

  

将一个第三方模块(或两者)包装在一个简单的模块中,该模块除了显式地仅导出模块实际需要的软件包外什么都不做。

但是我怎样才能在Maven(3.5.0)中实现这一点,我目前拥有的只有<dependency>和maven-compiler-plugin:3.7.0 - 而且我不想静态重新包装第三方JAR?

欢迎提供示例的任何提示或指针。

1 个答案:

答案 0 :(得分:0)

请检查 http://mail-archives.apache.org/mod_mbox/felix-users/200709.mbox/%3CF034315F398DE24C9A76FB51DAFAB709FC9638@nets13ga.ww300.siemens.net%3E

示例为我工作:

<Export-Package>
  org.hibernate.*;version=${pkgVersion};-split-package:=merge-last                       

</Export-Package>