感谢单独的thread,我意识到我的项目的超级jar有一个bug。我使用maven-shade-plugin
创建了超级jar,因为我需要更高级的转换器功能来合并多个ServiceLoader定义。
因此,问题是我的项目在tools.jar
上具有系统范围的编译时依赖性,在本地机器上相对于tools.jar
sysprop的值定位java.home
。错误是我没有意识到这种依赖性是:
pom.xml
和${java.home}
正在被解析并硬编码到超级jar的POM中。第二部分特别令人尴尬,因为它揭示了构建机器的JDK位置(见第50行here)。要解决此问题,我有条件地禁用了创建依赖项的配置文件。以下所有详细信息均位于<activation>
部分:
在:
<profile>
<id>internal.tools-jar</id>
<activation>
<file>
<exists>${java.home}/../lib/tools.jar</exists>
</file>
</activation>
<dependencies>
<dependency>
<groupId>com.sun</groupId>
<artifactId>tools</artifactId>
<version>1.8.0</version>
<scope>system</scope>
<systemPath>${java.home}/../lib/tools.jar</systemPath>
</dependency>
</dependencies>
</profile>
后:
<profile>
<id>internal.tools-jar</id>
<activation>
<jdk>1.8</jdk>
<file>
<missing>src/main/java/systems/manifold/Dummy.java</missing> <!-- this file is only present in the uber-jar module, therefore exclude if present -->
</file>
</activation>
<dependencies>
<dependency>
<groupId>com.sun</groupId>
<artifactId>tools</artifactId>
<version>1.8.0</version>
<scope>system</scope>
<systemPath>${java.home}/../lib/tools.jar</systemPath>
</dependency>
</dependencies>
</profile>
所以,毕竟,我的问题是:这是防止这个系统范围的依赖关系泄漏到uber-jar的依赖关系减少pom.xml
的最好方法吗?
提前致谢,
凯尔
更新2018-02-16:
不幸的是,shade插件中的以下配置不会阻止系统范围依赖性泄漏:
<artifactSet>
<excludes>
<exclude>*</exclude>
</excludes>
</artifactSet>
到shade插件的配置,但解析的系统范围依赖性仍然显示在POM中。令人费解!