Maven没有正确选择JAVA_HOME

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

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

  com.sun tools 1.6 system ${java.home}/../lib/tools.jar  

当我运行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 

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

  com.sun tools 1.6 system C:\Program Files\Java\jdk1.6.0_26\lib\tools.jar  

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

这是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://jre/bin/server/jvm.dll 

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

另外,为了检查Maven正在使用的运行时调用

 mvn -v 

如果您仍然依赖于工具jar作为问题,那么您添加的依赖项之一具有该依赖性(并且它的质量非常差)。 找出它运行的那个

 mvn dependency:tree 

或者如果失败则只删除一个依赖关系,直到上面的命令出现问题为止。

然后,当您知道它来自何处时,您可以决定下一步该做什么。 一条路径是对拉动工具的依赖项使用排除。

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

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

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

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

  • 来自特定的Eclipse项目,

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

  • 从运行配置。

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

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

听起来你在Eclipse中运行Maven。 Eclipse不会咨询JAVA_HOME。

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

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

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

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