Oli*_*dža 13 maven tools.jar java-9
我有一个使用这种技术的项目在JDK 8及更早版本中运行良好.但是,在JDK 9中,这个jar被删除了,它不再起作用:
com.sun的"dependencies.dependency.systemPath":tools:jar指的是一个不存在的文件/usr/lib/jvm/java-9-jdk/../lib/tools.jar.请验证您使用JDK而不仅仅是JRE运行Maven.
(虽然JDK 9中没有 tools.jar ,但这条路看起来很奇怪)
什么是可以在JDK版本甚至JDK供应商中工作的最佳实践?我甚至没有在OpenJDK上找到JDK 9的任何解决方法(同时保持项目可在JDK 8上构建).
Nic*_*lai 15
您的问题是由您似乎使用过的Java 9 EA构建中的Project Jigsaw更改引起的.JEP 220描述了它们.
删除rt.jar
tools.jar
部分:并更详细地描述了这一点,但风险和假设包含一个很好的总结:
JDK和JRE的图像将,如上所述,不再包含的文件
lib/rt.jar
,lib/tools.jar
,lib/dt.jar
,和其他内部jar文件.假定存在这些文件的现有代码可能无法正常工作.
正如您所观察到的那样,这些文件已经消失.再向下:
以前在
lib/tools.jar
该文件被添加到类路径中时可见的类和资源文件现在将在JDK映像中通过系统类加载器或某些情况下的引导类加载器可见.但是,在应用程序类路径中,即在系统属性的值中,不会提及包含这些文件的模块java.class.path
.
所以这些类tools.jar
被移动到模块中,但似乎它们可能对用户不可用.你应该使用最近的Jigsaw构建的jdeps ......
$jdeps -M -s $your_JAR
jdeps -jdkinternals $your_JAR
如果你很幸运,你正在使用的API已经发布(那么它将不会出现在第二次分析中)或者有一个公共替代(第二个分析会列出).否则你应该考虑把它带到Jigsaw邮件列表并在那里寻求帮助,明确指出你正在使用哪些API以及用于什么.
事实证明,JDK 9感知解决方案与原始技巧并没有什么不同:
<profiles>
<profile>
<id>jigsaw</id>
<activation>
<jdk>[1.9,)</jdk>
</activation>
<!-- No dependencies needed by Jigsaw -->
<dependencies/>
</profile>
<profile>
<id>default-jdk</id>
<activation>
<file>
<exists>${java.home}/../lib/tools.jar</exists>
</file>
</activation>
<dependencies>
<dependency>
<groupId>com.sun</groupId>
<artifactId>tools</artifactId>
<scope>system</scope>
<version>1.6</version>
<systemPath>${java.home}/../lib/tools.jar</systemPath>
</dependency>
</dependencies>
</profile>
<profile>
<id>osx-jdk</id>
<activation>
<file>
<exists>${java.home}/../Classes/classes.jar</exists>
</file>
</activation>
<dependencies>
<dependency>
<groupId>com.sun</groupId>
<artifactId>tools</artifactId>
<scope>system</scope>
<version>1.6</version>
<systemPath>${java.home}/../Classes/classes.jar</systemPath>
</dependency>
</dependencies>
</profile>
</profiles>
Run Code Online (Sandbox Code Playgroud)
如果将整个dependency
声明移动到profile
它,则可以使不同的配置文件使用不同数量的依赖项.
我创建了一个可重用的模块来隐藏依赖于tools.jar的单个项目的复杂性:
<dependency>
<groupId>com.github.olivergondza</groupId>
<artifactId>maven-jdk-tools-wrapper</artifactId>
<version>0.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8980 次 |
最近记录: |