JAVA_HOME 和 Maven 依赖项的奇怪问题

Posted

技术标签:

【中文标题】JAVA_HOME 和 Maven 依赖项的奇怪问题【英文标题】:weird problem with JAVA_HOME and maven dependencies 【发布时间】:2011-07-18 14:06:00 【问题描述】:

当我在项目上运行 maven 包时,我将 JAVA_HOME 变量设置为 C:\Program Files\Java\jre6\,它告诉我它无法解决依赖关系

[ERROR] Failed to execute goal org.codehaus.mojo:aspectj-maven-plugin:1.0:compile (default) on project roo: Execution default of goal o
rg.codehaus.mojo:aspectj-maven-plugin:1.0:compile failed: Plugin org.codehaus.mojo:aspectj-maven-plugin:1.0 or one of its dependencies
could not be resolved: Could not find artifact com.sun:tools:jar:1.4.2 at specified path C:\Program Files\Java\jre6/../lib/tools.jar ->
[Help 1]

所以它假设 JAVA_HOME 实际上比实际更深一层,我查看了 maven 本地存储库,发现 log4j 1.2.16 使用了这个依赖项

我试图让 JAVA_HOME 看起来像 C:\Program Files\Java\jre6\bin\ 但后来 maven 无法运行,它告诉我我的 JAVA_HOME 路径错误

【问题讨论】:

【参考方案1】:

您将需要 Java JDK 而不仅仅是 JRE。你可以在Oracle's Java Page得到一个

编辑: 来自Maven Properties Guide:

$java.home specifies the path to the current JRE_HOME environment use with relative paths to get for example:
<jvm>$java.home../bin/java.exe</jvm>

例如在c:\jdk 中使用JDK,maven $java.home 指向c:\jdk\jre

【讨论】:

我已经安装了 jdk,并将 JAVA_HOME 更改为 jdk 文件夹 c:\Program Files\Java\jdk1.6.0_24 但是当我运行 maven 时它说:c:\roo\test&gt;mvn ERROR: JAVA_HOME is set to an invalid directory. JAVA_HOME = "C:\Program Files\Java\jre6\jdk1.6.0_24" Please set the JAVA_HOME variable in your environment to match the location of your Java installation 奇怪,我已经重启了 pc 和 maven 现在可以工作了。请告诉我C:\Program Files\Java\jre6/../lib/tools.jar 点在哪里?所以现在,我想,C:\Program Files\Java\jdk1.6.0_24/../lib/tools.jar。不是相对路径,指向上层文件夹吗?但是 `C:\Program Files\Java` 中没有 lib 这样的文件夹,但依赖关系已解决 我不知道它指向哪里。但是需要重新启动来更新 JAVA_HOME 并且如果更改了整个系统中的 PATH。在 linux 中,您需要打开一个新的终端,例如让更改后的环境变量可用。 变量已经更新,你可以看到 maven 在打印更新版本时意识到了这个变化【参考方案2】:

在我的命令行 Maven 项目(与 Eclipse 中的 maven 版本不同)进行 Java 自动更新(在 Windows 7 上)之后,我遇到了这个问题。 JRE 自动更新删除了我的系统 JAVA_HOME 环境变量指向的 JDK 下的 jre 文件夹。由于没有找到 jre,maven 默认使用新安装的 JRE(仍然没有弄清楚如何)。我恢复了我的 JDK 目录下的 jre 文件夹并删除了对 C:\ProgramData\Oracle\Java\javapath 的引用,该引用已添加到系统 Path 变量的开头,并且 maven 构建恢复正常。

【讨论】:

【参考方案3】:

您还应该确保 Java 库位于项目的类路径中。导航到项目的属性-> java 构建路径-> 库选项卡。检查是否列出了 jdk 库。如果没有添加它。这也可能是导致此类错误的原因。

【讨论】:

【参考方案4】:

我也遇到过类似的问题,答案就是这么简单;

maven 找不到 JAVA_HOME 变量,直到我意识到我将 Java 路径写入了路径变量。 所以我的“错误:在你的环境中找不到 JAVA_HOME...”的答案是创建一个名为 JAVA_HOME 的新变量。也许这对傻瓜来说是失败的,但我花了一个小时才意识到......

【讨论】:

【参考方案5】:

我遇到了类似的问题,以下解决了这个问题:

JAVA_HOME = C:\Program Files\java\jdk
M2_HOME= C:\Program Files\apache-maven

inside path = ....%JAVA_HOME%\bin;%M2_HOME%\bin;

这解决了问题。

【讨论】:

【参考方案6】:

今天遇到了同样的问题。事实证明我特别需要在路径中使用“程序文件”,尽管这个 windows 安装(以及文件夹的名称)是德语的。

这种事情也不是第一次发生了。

因此,如果您确定您的路径是正确的,请尝试“程序文件”而不是您的本地化替代方案。为我工作。

【讨论】:

【参考方案7】:

要运行 Maven - 您需要配置环境变量 JAVA_HOME 以指向 JDK

例如JAVA_HOME=C:\Program Files\Java\jdk1.7.0_25

您还需要 PATH 环境变量中包含的 C:\Program Files\Java\jdk1.7.0_25\bin。

问候, 地盘

【讨论】:

【参考方案8】:

配置JAVA环境变量的正确方法是:-

    将 JAVA_HOME 设置为您的“jdk 文件夹”\jre 将“jdk 文件夹”\bin 添加到您的 PATH 用户环境变量中

JAVA_HOME 是“java.exe”的位置,需要来自 JRE\bin 文件夹。 PATH是寻找需要来自JDK\bin文件夹的javac.exe。

这也确保了 JDK 和 JRE 兼容

【讨论】:

【参考方案9】:

我在输入 java -version 时能够在命令提示符中看到适当的响应,但在输入 mvn -version 时出现此错误。

就我而言,这是一个愚蠢的错误。 JAVA_HOME 环境变量一直指向..\jdk\bin 文件夹,这导致了问题。从 JAVA_HOME 变量的值中删除 bin 后,我可以使用 Maven。

注意:系统变量路径应包含指向 JDK 的 bin 文件夹的值。

问候, 巴拉吉.K

【讨论】:

【参考方案10】:

只是在有关更改窗口首选项的答案中添加更多信息。我将 JRE 位置设置为 C:\Program Files\Java\jre7,因为这似乎是显而易见的选择。

但是,这是失败的。指出的正确答案是C:\Program Files\Java\jdk1.7.0_10\jre。我指出这一点是因为这是一个容易犯的错误。

【讨论】:

【参考方案11】:

这个问题也出现在 Intellij IDEA (IDEA 11.x ~ Windows 7 ~ Java 7) 中。指定 systempath 属性是在引用 IDEA jre ...

一个稳定的解决方案是在 $HOME/.m2/settings.xml 下创建一个本地 maven 配置文件

<profiles>
  <profile>
    <id>dev</id>
      <activation>
        <activeByDefault>true</activeByDefault>
          <jdk>NUMERIC_VERSION</jdk>
        </activation>
        <properties>
          <java.home>                   
            <!-- ABSOLUTE_PATH_HERE -->
          </java.home> 
        </properties>
  </profile>
</profiles>

【讨论】:

【参考方案12】:

在不弄乱 JAVA_HOME 环境变量的情况下,这是我能够修复它的方法。

安装 1.6.x jdk。

在已安装的 JRE 下的 Eclipse/Preferences 中,为 JDK 添加一个条目并将其设为默认值(将位置设置为 JDK 文件夹,例如 C:\Program Files\Java\jdk1.6.0_34

编辑属性并将 JDK_HOME/lib/tools.jar 添加到系统库列表中。

或者,假设安装了 jdk,您可以将 JDK/lib/tools.jar 添加到现有默认 JRE 的系统库列表中

【讨论】:

【参考方案13】:

我也发现这个对我有帮助。

... 使用 Eclipse,您需要验证已安装的 JRE 是否正在使用 JDK 安装。

这意味着在配置选项中... 窗口/首选项/Java/已安装的 JRE ...您应该指向 JDK 安装。

您需要更改 jdk 中 jre 的路径。对于 %Program Files%\Java\jdk1.6.0_25\jre

【讨论】:

我还必须在 eclipse.ini '-vm C:\Program Files\Java\jdk1.6.0_31\bin\javaw.exe' 中设置 VM【参考方案14】:

java.home 变量可以进一步从您的项目 pom.xml 派生。仔细检查您的 Maven 编译器插件参考。我在尝试构建时遇到了同样的问题,抱怨它找不到 javac。我的 java.home、JAVA_HOME 都设置正确。

原来对我来说是 FIX 是更正 pom.xml 我最终做了以下更改:

            <!-- Original Version of compiler plugin reference -->
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.0.2</version>
            <configuration>
                <source>$default.java.version</source>
                <target>$default.java.version</target>
                <showDeprecation>false</showDeprecation>
                <executable>$default.java.home/bin/javac</executable>
                <compilerVersion>$default.java.version</compilerVersion>
                <fork>true</fork>
            </configuration>

            <!-- MODIFIED Version of compiler plugin reference -->
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.0.2</version>
            <configuration>

                <!-- SPECIFY A DISCRETE VERSION!! Do not let it derive it! -->
                <source>1.6</source>
                <target>1.6</target>

                <!--
                  <showDeprecation>false</showDeprecation>
                  <executable>$default.java.home/bin/javac</executable>
                  <compilerVersion>$default.java.version</compilerVersion>
                  <fork>true</fork>
               -->
            </configuration>

【讨论】:

【参考方案15】:

编写、编译和打包java程序需要一个JDK,因为必要的工具只随JDK(Java Development Kit)一起分发。 JRE(Java Runtime Environment)只需要运行一个java程序。

【讨论】:

以上是关于JAVA_HOME 和 Maven 依赖项的奇怪问题的主要内容,如果未能解决你的问题,请参考以下文章

为啥有排除 pom.xml / maven 中依赖项的依赖项的选项?

具有 maven 依赖项的 Java ClassNotFoundException

是否有一个 Maven 插件可以验证传递依赖项的冲突版本?

具有依赖项的 Maven2 + JMeter + JUnit

为啥 Maven 依赖项的顺序很重要?

maven依赖本地非repository中的jar包