我在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文件夹中查找错误消息“{ {1}}”。
C:\Program Files\Java\jre6\lib\tools.jar
有趣的是:当我设置依赖的完整路径时,它工作得很好。但我不想硬编码。
C:\>echo %JAVA_HOME%
C:\Program Files\Java\jdk1.6.0_26
有人可以为此建议任何动态解决方案吗?
答案 0 :(得分:36)
这是Eclipse Maven支持中的一个错误。 Eclipse根据Maven specs不支持所有全局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
答案 1 :(得分:2)
似乎你的JAVA_HOME设置为指向eclipse中的JRE。
答案 2 :(得分:2)
您绝不应该使用系统范围依赖项。 tools.jar中的所有代码都可以通过正在运行的JVM获得。你应该完全删除这种依赖..
另外,为了检查Maven正在使用的运行时,只需调用
mvn -v
如果您仍然依赖工具jar作为问题,那么您添加的依赖项之一具有该依赖性(并且它的质量非常差)。找出它运行的那个
mvn dependency:tree
或者如果失败则只删除一个依赖关系,直到上面的命令出现问题为止。
然后,当您知道它来自何处时,您可以决定下一步该做什么。一条路径就是在拉动工具的依赖项上使用排除。
答案 3 :(得分:1)
添加JAVA_HOME环境变量时,如果路径中有空格,则必须用引号将整个内容包装起来。
答案 4 :(得分:1)
Maven $ {java.home}属性根据Eclipse执行情况设置并从不同的地方获取:
来自为工作区选择的默认JRE
窗口&gt;首选项&gt; Java&gt;已安装的JRE
来自特定的Eclipse项目,
Java构建路径&gt;库&gt; JRE系统库
来自运行配置。
运行配置&gt;具体运行配置&gt; JRE
记住您的JRE主路径指向JDK下的JDK或JRE
答案 5 :(得分:1)
还要在主目录中的.mavenrc文件中查找。 这让我措手不及。
我按照建议进行了更改,只是发现我的.mavenrc文件将JAVA_HOME设置为较旧的版本。
答案 6 :(得分:0)
听起来你在Eclipse中运行Maven。 Eclipse不会咨询JAVA_HOME。
确保已将Eclipse首选项中的JRE设置为所需的JDK。
答案 7 :(得分:0)
您可能使用了错误的Maven安装。在Window&gt;中切换它偏好&gt; Maven&gt;安装。我已经安装了Fedora Maven;将其更改回默认值(m2e中嵌入的版本)为我解决了问题。
我怀疑造成这个问题的原因是Fedora Maven的安装是使用Fedora的OpenJDK,这可能会将tools.jar放在一个奇怪的位置(关于Fedora的OpenJDK的一切都很奇怪和非标准),所以Maven无法找到它