为什么maven会忽略我的JAVA_HOME?

时间:2010-07-28 07:24:01

标签: java maven-2

这是我从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本身是从用户ccenv启动的,因为这个用户给了我(它是CentOS 5.4):

JAVA_HOME=/usr/java/default
PATH=/usr/local/maven/bin:/usr/local/bin:/bin:/usr/bin:/home/cc/bin

7 个答案:

答案 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机器。

  1. 看看/usr/bin/java,这是一个符号链接。查看此符号链接的目标位置(在我的情况下,目标位于此位置/etc/alternatives/java
  2. /etc/alternatives/java也是象征性的联系。创建到“正确”JVM(例如Sun的JVM)的新符号链接
  3. 用新创建的符号链接替换/etc/alternatives/java
  4. 这适用于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

首先,然后您的命令 可以工作。