繁体   English   中英

Maven 没有正确选择 JAVA_HOME

[英]Maven not picking JAVA_HOME correctly

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

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

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

根据规格:

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

至少在 Eclipse 4.3.1 中不是这样,这里java.home总是指向用于启动 EclipseJRE,而不是构建 JRE。

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

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

看来您的 JAVA_HOME 已设置为指向 eclipse 中的 JRE。

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

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

mvn -v

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

mvn dependency:tree

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

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

Maven ${java.home} 属性是根据您的 Eclipse 执行设置和从不同位置获取的:

  • 从为工作区选择的默认 JRE

    窗口>首选项>Java>已安装的JRE

  • 从特定的 Eclipse 项目,

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

  • 从运行配置。

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM