Maven没有正确选择JAVA_主页

Maven没有正确选择JAVA_主页,java,maven,pom.xml,Java,Maven,Pom.xml,我在windows环境下使用maven编译我的项目。尽管我刚刚创建了这个项目,并为各种库添加了依赖项 当我添加它们时,maven开始抱怨缺少tools.jar,因此我在我的pom.xml中添加了以下内容: <dependency> <groupId>com.sun</groupId> <artifactId>tools</artifactId> <version>1.6</version> <

我在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>
问题是
tools.jar
位于“
C:\Program Files\Java\jdk1.6.0\u 26\lib
”中,并在
Java\u HOME
环境变量中正确设置,但maven仍在jre文件夹中查找错误消息“
C:\Program Files\Java\jre6\lib\tools.jar

有趣的是:当我在dependency中设置完整路径时,效果很好。但我不想硬编码

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

com.sun
工具
1.6
系统
C:\ProgramFiles\Java\jdk1.6.0\U 26\lib\tools.jar

有人能为这个问题提出任何动态解决方案吗?

听起来你在Eclipse中运行Maven。Eclipse不咨询JAVA_主页


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

您的JAVA\U主页似乎已设置为指向Eclipse中的JRE。

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

为了检查运行时Maven使用的是什么,只需调用

mvn -v
如果您仍然存在对tools jar的依赖性问题,那么您添加的一个依赖性就具有这种依赖性(而且它的质量非常差)。找出它运行的是哪一个

mvn dependency:tree
或者,如果失败,只需删除一个又一个依赖项,直到上述命令的问题解决为止


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

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

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

根据规范:

${java.home}指定当前JRE_主环境的路径 例如,与相对路径一起使用以获取

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

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

-vm
C://jre/bin/server/jvm.dll

Maven${java.home}属性已设置,并根据您的Eclipse执行情况从不同的位置获取:

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

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

  • 从特定的Eclipse项目中

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

  • 从运行配置

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


记住,您的JRE主路径指向JDK下的JDK或JRE,您可能使用了错误的Maven安装。在窗口>首选项>Maven>安装中切换它。我把我的设置成了Fedora Maven;将其更改回默认值(嵌入m2e的版本)为我解决了这个问题


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

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


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

${java.home}的值是多少?您是从命令行还是在Eclipse或IntelliJ等IDE中运行Maven?@metalmadz java_home是环境variable@cuberoot,我在Eclipse中运行它。我一直避免将JDK/JRE放在包含空格的目录中(参见“程序文件”)正如大家所知道的那样,这会给Maven带来麻烦。也许可以试一试?我知道我不应该使用系统范围依赖项,但正如我在问题中所说的,当我不提及依赖项中的tools.jar时,maven开始抱怨缺少工件“com.sun:tools:jar:1.4.2”。下面是mvn-VC:\>mvn-v ApacheMaven 3.0.3的输出(r1075438;2011-02-28 23:01:09+0530)Maven主页:C:\Custom Programs\apache-Maven-3.0.3\bin\。。Java版本:1.6.0_26,供应商:Sun Microsystems Inc.Java home:C:\Program Files\Java\jdk1.6.0_26\jre默认区域设置:en_US,平台编码:Cp1252操作系统名称:“windows xp”,版本:“5.1”,arch:“x86”,系列:“windows”是否有与此相关的Eclipse Maven错误链接?Linux环境中的
javaw.exe
类似于什么
jre/bin/
有一个
java
和一个
javaws
,但没有
javaw
。在Mac/Linux上,路径应该是smth,就像
//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
这一答案在6年后仍然是正确的(对于Eclipse 2020-09)!在我的例子中,运行配置设置是错误的。
mvn -v
mvn dependency:tree
-vm
C:/<your_path_to_jdk170>/jre/bin/server/jvm.dll