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
总是指向用于启动Eclipse的JRE,而不是构建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找不到它。