Maven 没有正确选择 JAVA_HOME

Posted

技术标签:

【中文标题】Maven 没有正确选择 JAVA_HOME【英文标题】:Maven not picking JAVA_HOME correctly 【发布时间】:2012-10-28 15:09:16 【问题描述】:

我在 windows 环境下使用 maven 编译我的项目。虽然我刚刚创建了项目并添加了各种库的依赖项。

当我添加它们时,maven 开始抱怨缺少tools.jar,所以我在下面添加到我的pom.xml

<dependency>
  <groupId>com.sun</groupId>
  <artifactId>tools</artifactId>
  <version>1.6</version>
  <scope>system</scope>
  <systemPath>$java.home/../lib/tools.jar</systemPath>
</dependency>

当我运行 maven 安装时,我收到一个缺少 jar 的错误,如下所示:

[ERROR] Failed to execute goal on project GApp: Could not resolve dependencies for project GApp:GApp:war:0.0.1-SNAPSHOT: Could not find artifact com.sun:tools:jar:1.6 at specified path C:\Program Files\Java\jre6\lib\tools.jar -> [Help 1]

问题是tools.jar 位于“C:\Program Files\Java\jdk1.6.0_26\lib”中,并且在JAVA_HOME 环境变量中设置正确,但 maven 仍在查看 jre 文件夹,如错误消息“C:\Program Files\Java\jre6\lib\tools.jar”中所示。

C:\>echo %JAVA_HOME%
C:\Program Files\Java\jdk1.6.0_26

有趣的是:当我设置完整的依赖路径时,它工作得很好。但我不想硬编码。

<dependency>
  <groupId>com.sun</groupId>
  <artifactId>tools</artifactId>
  <version>1.6</version>
  <scope>system</scope>
  <systemPath>C:\Program Files\Java\jdk1.6.0_26\lib\tools.jar</systemPath>
</dependency>

有人可以为此建议任何动态解决方案吗?

【问题讨论】:

$java.home 的值是多少? 您是从命令行还是在 Eclipse 或 IntelliJ 等 IDE 中运行 Maven? @metalmadz JAVA_HOME 是环境变量 @cuberoot,我在 Eclipse 中运行它 我一直避免将 JDK/JRE 放置在包含空格的目录中(参见“程序文件”),因为这会与 Maven 混淆。也许试试看? 【参考方案1】:

检查你是否有一个 .mavenrc 文件,它可能会强制 JAVA_HOME 与环境变量中设置的不同。

【讨论】:

【参考方案2】:

还可以查看主目录中的 .mavenrc 文件。 这让我措手不及。

我按照建议更改了所有内容,只是发现我的 .mavenrc 文件将 JAVA_HOME 设置为旧版本。

【讨论】:

【参考方案3】:

您可能使用了错误的 Maven 安装。在 Window > Preferences > Maven > Installations 中切换它。我将我的设置为 Fedora Maven 安装;将其更改回默认值(嵌入在 m2e 中的版本)为我解决了这个问题。

我怀疑导致这个问题的原因是 Fedora Maven 安装使用了 Fedora 的 OpenJDK,这可能会将 tools.jar 放在一个奇怪的位置(关于 Fedora 的 OpenJDK 的一切都是奇怪且非标准的),所以 Maven 找不到它。

【讨论】:

【参考方案4】:

这是 Eclipse Maven 支持中的一个错误。根据Maven specs,Eclipse 不支持所有全局 Maven 属性。

根据规格:

$java.home 指定当前 JRE_HOME 环境的路径 使用相对路径来获取例如

至少在 Eclipse 4.3.1 中并非如此,这里的java.home 始终指向用于启动 Eclipse 的 JRE,而不是构建 JRE。

要解决这个问题,您需要使用 JDK 中的 JRE 启动 Eclipse,方法是将类似这样的内容添加到 eclipse.ini之前 -vmargs!):

-vm
C:/<your_path_to_jdk170>/jre/bin/server/jvm.dll

【讨论】:

是否有与此相关的 Eclipse Maven 错误的链接? Linux 环境中javaw.exe 的类比是什么? jre/bin/ 有一个java 和一个javaws,但没有javaw 在 Mac/Linux 上,路径类似于 /&lt;your_path_to_jdk170&gt;/jre/bin/java 这个问题好像还存在?我今天遇到了同样的错误,你的回答真的很有帮助。那么,即使在 4 年多之后,这个问题是否存在?这个错误到底是什么? 这个答案五年后,这个错误仍然存​​在(现在是 2019-04-05)。我还想指出,要非常小心路径。 1) 不要在字符串周围使用双引号。 2) 即使在 Windows 中也使用正斜杠。 3) 使用 jvm.dll 4) 确保指向jdk.../jre/...。 5)正如@Daniel Fernández 指出的那样,在 -vm 之后需要换行(而不是 --vm!)对我来说,获胜的路径是 C:/Program Files/Java/jdk1.8.0_201/jre/bin/server/jvm.dll【参考方案5】:

Maven $java.home 属性根据你的 Eclipse 执行设置和取自不同的地方:

来自为工作区选择的默认 JRE

Window>Preferences>Java>已安装的 JRE

来自特定的 Eclipse 项目,

Java 构建路径>库>JRE 系统库

来自运行配置。

运行配置> 特定运行配置 > JRE

记住您的 JRE 主路径指向 JDK 或 JDK 下的 JRE

【讨论】:

这个答案在 6 年后仍然准确(对于 Eclipse 2020-09)!就我而言,运行配置设置是错误的。【参考方案6】:

添加 JAVA_HOME 环境变量时,如果路径中有空格,则必须将整个内容用引号括起来。

【讨论】:

【参考方案7】:

您不应该使用系统范围依赖项。 tools.jar 中的所有代码都可以通过正在运行的 JVM 获得。你应该完全删除这个依赖..

另外,为了检查 Maven 正在使用什么运行时,只需调用

mvn -v

如果您对工具 jar 的依赖仍然存在问题,则您添加的依赖项之一具有该依赖项(而且质量确实很差)。找出它运行的是哪一个

mvn dependency:tree

或者如果失败,只需删除一个又一个依赖项,直到上述命令的问题消失。

然后,当您知道它的来源时,您就可以决定下一步该做什么。一种方法是对引入工具的依赖项使用排除项。

【讨论】:

我知道我永远不应该使用系统范围依赖项,但是正如我在问题中所传达的那样,当我没有提到依赖项中的 tools.jar 时,maven 开始抱怨缺少工件“com.sun:tools:罐子:1.4.2"。 下面是 mvn -v C:\>mvn -v Apache Maven 3.0.3 (r1075438; 2011-02-28 23:01:09+0530) Maven home: C:\自定义程序\apache-maven-3.0.3\bin\.. Java 版本:1.6.0_26,供应商:Sun Microsystems Inc. Java 主页:C:\Program Files\Java\jdk1.6.0_26\jre 默认语言环境:en_US,平台编码:Cp1252 操作系统名称:“windows xp”,版本:“5.1”,arch:“x86”,家族:“windows”【参考方案8】:

您的 JAVA_HOME 似乎设置为指向 Eclipse 中的 JRE。

【讨论】:

【参考方案9】:

听起来您是在 Eclipse 中运行 Maven。 Eclipse 不咨询 JAVA_HOME。

确保您已将 Eclipse 首选项中的 JRE 设置为所需的 JDK。

【讨论】:

以上是关于Maven 没有正确选择 JAVA_HOME的主要内容,如果未能解决你的问题,请参考以下文章

在pom.xml中的dependencies点击add怎么没有搜索到相关jar包

Maven 构建和 maven-failsafe-plugin - 分叉的虚拟机在没有正确说再见的情况下终止

openapi-generator-maven-plugin 在没有正确导入的情况下生成 BigDecimal 属性

eclipse导入maven项目,资源文件位置显示不正确

检验maven的配置是否生效或正确。

java创建一个maven web的项目,为啥只有src文件夹和pom.xml文件??