[英]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
总是指向用于启动 Eclipse的JRE,而不是构建 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.