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>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