这就是我从 CruiseControl 执行
mvn
时得到的结果:
无法在以下位置找到 Javac 编译器: /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/../lib/tools.jar 请确保您使用的是 JDK 1.4 或更高版本 不是 JRE(需要 com.sun.tools.javac.Main 类)。 在大多数情况下,您可以更改 Java 的位置 通过设置JAVA_HOME环境变量进行安装。
同时,从命令行启动它给出了正确的结果。为什么
mvn
要进入这个tools.jar
?为什么它忽略我的JAVA_HOME
?我该如何解决它?
我不知道当
JAVA_HOME/PATH
从CC启动时,mvn
的值是多少。我真的很想获得这些信息,但我不知道如何获得。 CC 本身是从用户 cc
和 env
启动的,该用户给了我(它是 CentOS 5.4):
JAVA_HOME=/usr/java/default
PATH=/usr/local/maven/bin:/usr/local/bin:/bin:/usr/bin:/home/cc/bin
我遇到了同样的问题,简单地重新安装 Java JDK 就解决了这个问题:
apt-get install openjdk-6-jdk
为什么 mvn 会进入这个tools.jar?
因为
tools.jar
包含 com.sun.tools.javac.Main
类,用于以编程方式调用 javac
编译器。
为什么它忽略我的JAVA_HOME
这是“有趣”的部分(因为它在 CC 之外工作)。您是否以专用用户身份运行 CC?如果是,
JAVA_HOME
是否为该用户明确定义? 的输出是什么
echo $JAVA_HOME -or-
echo $PATH
假设你有一台linux机器。
/usr/bin/java
,这是一个符号链接。看看这个符号链接的目标在哪里(在我的例子中,目标位于这个位置/etc/alternatives/java
)/etc/alternatives/java
也是符号链接。创建到“正确”JVM(例如 Sun 的 JVM)的新符号链接/etc/alternatives/java
替换为新创建的符号链接。这适用于 Ubuntu 发行版。有一种自动方法可以做到这一点,但我实际上忘记了:D
在 Sun 版本中键入以下行
sudo update-java-alternatives -s java-6-sun
我最终不得不指出 Ubuntu 上的 Oracle Java 7 安装。 Gradle (1.6) 似乎根本不喜欢符号链接。因此,我编辑了 /opt/gradle/gradle-1.6/bin/gradle 文件以在脚本顶部导出 /usr/lib/jvm/java-7-oracle 的 JAVA_HOME 。现在很幸福。
我知道这是一个过时的问题,但我最终还是在谷歌上搜索了同样的问题。 所以这个解决方案也可以正常工作:只需将“fork='yes'”放入“javac”任务中即可。在此 javac 任务之后,将遵循 JAVA_HOME 设置。
也请查看您是否有
~/.mavenrc
文件。在这里您可以覆盖系统$JAVA_HOME
。当 ~/.mavenrc
中的值指向无效路径时,您也会收到警告。我花了几个小时才弄清楚...
我在 Mac 上遇到了这个问题,似乎自制程序
mvn
脚本覆盖了 JAVA_HOME 值并完全忽略它。我建议安装您自己的 Maven 发行版。