【问题标题】:How to get maven compiler plugin to work without failing with tools.jar not found error?如何让 maven 编译器插件正常工作而不会因 tools.jar not found 错误而失败?
【发布时间】:2018-04-10 00:24:30
【问题描述】:

我们在一个奇怪的 unix-ish 开发平台下使用 maven 时遇到了一些问题。 maven 编译器插件抱怨由于默认安装的 java 中奇怪的 JDK/JRE 混淆而无法找到 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 指向真正的 JAVA_HOMEjre 子目录。似乎没有多少复制、符号链接或其他黑客手段可以使我们使 ../liblib 相同。

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

【问题讨论】:

  • 你用的是哪个java版本?
  • 我们使用的是 java 7。
  • tools.jar 的使用必须在某个地方手动完成..检查您的 pom 文件...此外我建议升级您的插件版本...
  • maven 编译器插件@khmarbaise 需要 tools.jar。它编译东西。 :-)

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


【解决方案1】:

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

对我们来说似乎可行的一个解决方案是手动将 tools.jar 文件强制到 maven 命令的引导类路径中。我们使用以下程序转储引导类路径的当前值:

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 选项。

希望这对其他人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-07
    • 1970-01-01
    • 2018-02-18
    相关资源
    最近更新 更多