如何让 Maven 编译器插件正常工作而不会出现 tools.jar not found 错误?
How to get maven compiler plugin to work without failing with tools.jar not found error?
我们在一个奇怪的 unix-ish 开发平台下使用 maven 时遇到了一些问题。 Maven 编译器插件抱怨无法找到 tools.jar
,因为在默认安装的 java.
中存在奇怪的 JDK/JRE 混淆
[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
指向真实 [=15= 的 jre
子目录].再多的复制、符号链接或其他骇客手段似乎都无法让我们使 ../lib
与 lib
相同。
我们在 intertubes 上看到了很多类似的问题,但 none 很有帮助。我们无法像您在其他平台上那样重新安装 Java 或任何解决方案,但它应该是完整的 JDK 并且包括 bin
中的所有 j*tools子目录。
... tools.jar not found: our-java-home-dir/../lib/tools.jar -> [Help 1]
对我们来说似乎有效的一个解决方案是手动将 tools.jar
文件强制到 maven 命令的 boot-class-path 上。我们使用以下程序转储 boot-class-path 的当前值:
public class Main {
public static void main(String[] args) {
System.out.println("Boot-class-path=" +
System.getProperty("sun.boot.class.path"));
}
}
然后我们修改$M2_HOME/bin/mvn
中mvn脚本的末尾插入-Xbootclasspath
选项:
$MAVEN_OPTS \
-Xbootclasspath:existing-boot-class-path-here:${JAVA_HOME}/lib/tools.jar \
-additional-maven-options-go-here...
我们将 tools.jar
条目添加到上面主程序吐出的值的末尾。当然,您还需要保留其他 Maven 选项。
希望这对其他人有帮助。
我们在一个奇怪的 unix-ish 开发平台下使用 maven 时遇到了一些问题。 Maven 编译器插件抱怨无法找到 tools.jar
,因为在默认安装的 java.
[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
指向真实 [=15= 的 jre
子目录].再多的复制、符号链接或其他骇客手段似乎都无法让我们使 ../lib
与 lib
相同。
我们在 intertubes 上看到了很多类似的问题,但 none 很有帮助。我们无法像您在其他平台上那样重新安装 Java 或任何解决方案,但它应该是完整的 JDK 并且包括 bin
中的所有 j*tools子目录。
... tools.jar not found: our-java-home-dir/../lib/tools.jar -> [Help 1]
对我们来说似乎有效的一个解决方案是手动将 tools.jar
文件强制到 maven 命令的 boot-class-path 上。我们使用以下程序转储 boot-class-path 的当前值:
public class Main {
public static void main(String[] args) {
System.out.println("Boot-class-path=" +
System.getProperty("sun.boot.class.path"));
}
}
然后我们修改$M2_HOME/bin/mvn
中mvn脚本的末尾插入-Xbootclasspath
选项:
$MAVEN_OPTS \
-Xbootclasspath:existing-boot-class-path-here:${JAVA_HOME}/lib/tools.jar \
-additional-maven-options-go-here...
我们将 tools.jar
条目添加到上面主程序吐出的值的末尾。当然,您还需要保留其他 Maven 选项。
希望这对其他人有帮助。