为什么maven忽略我的JAVA_HOME?

问题描述 投票:0回答:8

这就是我从 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 maven-2
8个回答
11
投票

我遇到了同样的问题,简单地重新安装 Java JDK 就解决了这个问题:

apt-get install openjdk-6-jdk


2
投票

为什么 mvn 会进入这个tools.jar?

因为

tools.jar
包含
com.sun.tools.javac.Main
类,用于以编程方式调用
javac
编译器。

为什么它忽略我的JAVA_HOME

这是“有趣”的部分(因为它在 CC 之外工作)。您是否以专用用户身份运行 CC?如果是,

JAVA_HOME
是否为该用户明确定义?

的输出是什么
echo $JAVA_HOME -or-
echo $PATH

1
投票

假设你有一台linux机器。

  1. 看一下
    /usr/bin/java
    ,这是一个符号链接。看看这个符号链接的目标在哪里(在我的例子中,目标位于这个位置
    /etc/alternatives/java
  2. /etc/alternatives/java
    也是符号链接。创建到“正确”JVM(例如 Sun 的 JVM)的新符号链接
  3. /etc/alternatives/java
    替换为新创建的符号链接。

这适用于 Ubuntu 发行版。有一种自动方法可以做到这一点,但我实际上忘记了:D


0
投票

在 Sun 版本中键入以下行

sudo update-java-alternatives -s java-6-sun

0
投票

我最终不得不指出 Ubuntu 上的 Oracle Java 7 安装。 Gradle (1.6) 似乎根本不喜欢符号链接。因此,我编辑了 /opt/gradle/gradle-1.6/bin/gradle 文件以在脚本顶部导出 /usr/lib/jvm/java-7-oracle 的 JAVA_HOME 。现在很幸福。


0
投票

我知道这是一个过时的问题,但我最终还是在谷歌上搜索了同样的问题。 所以这个解决方案也可以正常工作:只需将“fork='yes'”放入“javac”任务中即可。在此 javac 任务之后,将遵循 JAVA_HOME 设置。


0
投票

也请查看您是否有

~/.mavenrc
文件。在这里您可以覆盖系统
$JAVA_HOME
。当
~/.mavenrc
中的值指向无效路径时,您也会收到警告。我花了几个小时才弄清楚...


0
投票

我在 Mac 上遇到了这个问题,似乎自制程序

mvn
脚本覆盖了 JAVA_HOME 值并完全忽略它。我建议安装您自己的 Maven 发行版。

© www.soinside.com 2019 - 2024. All rights reserved.