这是我从CruiseControl执行mvn
时得到的结果:
Unable to locate the Javac Compiler in: /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/../lib/tools.jar Please ensure you are using JDK 1.4 or above and not a JRE (the com.sun.tools.javac.Main class is required). In most cases you can change the location of your Java installation by setting the JAVA_HOME environment variable.
同时,从命令行启动它会得到正确的结果。为什么mvn
会进入此tools.jar
?为什么忽略我的JAVA_HOME
?我该如何解决?
从CC启动JAVA_HOME/PATH
时,我不知道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
答案 0 :(得分:11)
我遇到了同样的问题,Java JDK的简单重新安装为我解决了这个问题:
<强> apt-get install openjdk-6-jdk
强>
答案 1 :(得分:2)
为什么mvn会进入这个tools.jar?
因为tools.jar
包含用于以编程方式调用com.sun.tools.javac.Main
编译器的javac
类。
为什么忽略我的JAVA_HOME
这是“有趣”的部分(因为它在CC之外工作)。您是否使用专用用户运行CC?如果是,是否为此用户定义了JAVA_HOME
?什么是
echo $JAVA_HOME -or-
echo $PATH
答案 2 :(得分:1)
假设你有一台linux机器。
/usr/bin/java
,这是一个符号链接。查看此符号链接的目标位置(在我的情况下,目标位于此位置/etc/alternatives/java
)/etc/alternatives/java
也是象征性的联系。创建到“正确”JVM(例如Sun的JVM)的新符号链接/etc/alternatives/java
。这适用于Ubuntu发行版。有一种自动方式如何做但我实际上忘了它:D
答案 3 :(得分:0)
将以下行键入Sun的版本
sudo update-java-alternatives -s java-6-sun
答案 4 :(得分:0)
我最终不得不指向Ubuntu上的Oracle Java 7安装。 Gradle(1.6)似乎根本不喜欢sym链接。所以我编辑了/opt/gradle/gradle-1.6/bin/gradle文件,在脚本的顶部导出了/ usr / lib / jvm / java-7-oracle的JAVA_HOME。现在很高兴。
答案 5 :(得分:0)
我知道这是一个很过时的问题,但我最终还是在谷歌上搜索同样的问题。 所以这个解决方案也可以正常工作:只需要输入&#34; fork =&#39; yes&#39;&#34;在&#34; javac&#34;任务。在这个javac任务变得尊重JAVA_HOME设置之后。
答案 6 :(得分:0)
mvn
在不继承当前Shell的本地环境变量的命令环境中运行所有内容。
export JAVA_HOME
首先,然后您的命令 可以工作。