如何让maven编译器插件工作而不会失败,因为找不到tools.jar错误?

时间:2018-04-10 00:24:30

标签: maven maven-compiler-plugin tools.jar

我们在一个奇怪的unix-ish开发平台下使用maven时遇到了一些问题。由于在默认安装的java中出现奇怪的JDK / JRE混淆,maven编译器插件抱怨无法找到tools.jar

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:
      2.5.1:compile (default-compile) on project xyz: Fatal error compiling:
      tools.jar not found: our-java-home-dir/../lib/tools.jar -> [Help 1]

../lib/tools.jar应该是lib/tools.jar。 Java安装(Java 7)似乎是一个JDK,但不知何故,java将其检测为仅仅是一个JRE,因此存在混淆。在查看java代码正在做什么时,它必须认为我们已经安装了JRE,并期望JAVA_HOME指向真实jre的{​​{1}}子目录。没有任何复制,符号链接或其他hackery似乎对我们有用JAVA_HOME../lib相同。

我们在intertubes上看到了很多类似的问题,但没有一个有很大的帮助。我们无法像在其他平台上那样重新安装Java或任何解决方案,但它应该是一个完整的JDK并包含lib子目录中的所有j *工具。

1 个答案:

答案 0 :(得分:0)

  

...找不到tools.jar:our-java-home-dir /../ lib / tools.jar - > [帮助1]

对我们来说似乎有用的一个解决方案是将bin文件强制移动到maven命令的boot-class-path上。我们使用以下程序来转储boot-class-path的当前值:

tools.jar

然后我们修改了public class Main { public static void main(String[] args) { System.out.println("Boot-class-path=" + System.getProperty("sun.boot.class.path")); } } 中mvn脚本的结尾以插入$M2_HOME/bin/mvn选项:

-Xbootclasspath

我们将$MAVEN_OPTS \ -Xbootclasspath:existing-boot-class-path-here:${JAVA_HOME}/lib/tools.jar \ -additional-maven-options-go-here... 条目添加到上面的主程序吐出的值的末尾。当然还有其他的maven选项需要留在那里。

希望这有助于其他人。