Maven:POM.xml 中缺少工件 com.sun:tools:jar:1.6.0 编译时异常 [重复]
Posted
技术标签:
【中文标题】Maven:POM.xml 中缺少工件 com.sun:tools:jar:1.6.0 编译时异常 [重复]【英文标题】:Maven : Missing artifact com.sun:tools:jar:1.6.0 compile time exception in POM.xml [duplicate] 【发布时间】:2014-12-12 20:58:49 【问题描述】:当我尝试添加对工具的依赖时,我遇到了一个奇怪的问题并在我的 pom.xml 中遇到了编译时异常。 jar 显示如下(缺少工件 com.sun:tools:jar:1.6.0)
我已将我的 JAVA_HOME 变量设置如下:
JAVA_HOME:C:\Program Files\Java\jdk1.6.0_34
当我将它硬编码到 JDK1.6 的实际路径时,我没有发现任何错误,如下所示。
<dependency>
<groupId>com.sun</groupId>
<artifactId>tools</artifactId>
<version>1.6.0</version>
<scope>system</scope>
<systemPath>C:\Program Files\Java\jdk1.6.0_34\lib\tools.jar</systemPath>
</dependency>
但我知道这不是好的做法。请求解决此错误的指导。
【问题讨论】:
Maven 将使用 JAVA_HOME 环境变量来确定要使用的 JDK。检查那个设置是否正确。 @Shirish,您是在运行 maven 命令行还是从 IDE 运行? @StijnGeukens :我正在通过命令提示符运行它,但已将其与我的 Eclipse 集成。 @StijnGeukens :当我通过命令提示符运行我的命令(如清理、编译、测试)时,Stijn 有什么不同吗?我没有发现任何错误。我应该认为一切都很好吗?我第一次将我的 maven 项目与 eclipse 集成,所以我对这个编译时错误有点困惑。 是的,如果您在 eclipse 中为 M2E 插件定义了其他设置,这可能会有所不同(我不再使用 eclipse,所以我现在无法验证这一点)。 【参考方案1】:java.home
是一个系统属性,它通常指向 jre 目录,当您指向一个不存在的 jar 时,您会遇到错误。
如果您想在 pom 文件中引用环境变量,请使用以下语法。
$env.variable_name
在你的情况下,它应该是$env.JAVA_HOME
,如下所示
<dependency>
<groupId>com.sun</groupId>
<artifactId>tools</artifactId>
<version>1.6.0</version>
<scope>system</scope>
<systemPath>$env.JAVA_HOME/lib/tools.jar</systemPath>
</dependency>
更新: 正如 lexicore 所提到的,这不适用于 MAC,因为 MAC JDK 具有不同的文件结构。
【讨论】:
这不适用于 Mac。 感谢指出,我已经更新了答案。 是的,我看到了,做得好。但它毕竟似乎是重复的。 ***.com/questions/3080437/…【参考方案2】:在 Maven 中,$java.home 指向 JDK 使用的 JRE 目录,而不是 JDK 本身。请看这个问题:
Java_home in Maven
所以不是
$java.home/lib/tools.jar
假定您应该使用的 JDK 目录
$java.home/../lib/tools.jar
但是,这只是解决方案的一半。问题是在Mac下,目录结构不同。您必须使用用户配置文件才能使您的构建可靠地跨平台工作。
请看这个问题:
JDK tools.jar as maven dependency
而且,特别是this answer(这是正确的答案,而不是那里的 OP 接受的答案)。
这就是 Oracle 在one of their POMs 中的处理方式:
<!-- JDK dependencies -->
<dependency>
<groupId>com.sun</groupId>
<artifactId>tools</artifactId>
<version>1.6</version>
<scope>system</scope>
<systemPath>$tools.jar</systemPath>
</dependency>
然后在profiles
:
<profile>
<id>default-tools.jar</id>
<activation>
<file>
<exists>$java.home/../lib/tools.jar</exists>
</file>
</activation>
<properties>
<tools.jar>$java.home/../lib/tools.jar</tools.jar>
</properties>
</profile>
<profile>
<id>default-tools.jar-mac</id>
<activation>
<file>
<exists>$java.home/../Classes/classes.jar</exists>
</file>
</activation>
<properties>
<tools.jar>$java.home/../Classes/classes.jar</tools.jar>
</properties>
</profile>
在 Mac 上,JDK 具有不同的文件结构。这就是您必须定义这些配置文件的原因。
另见以下帖子:
JDK tools.jar as maven dependency Build error: missing artifact com.sun:tools:jar:1.6 missing artifact sun.jdk:tools:jar:1.6.0:system Missing artifact com.sun:tools:jar:1.5.0 maven【讨论】:
注意这里的区别——他们使用$java.home/../lib
而不是$java.home/lib
,这表明$java.home
指向JDK内部的jre
目录而不是JDK本身。
@IanRoberts 有趣。我想知道为什么它会起作用。这可能也是我面临的另一个问题的原因:***.com/questions/26393332/…我会问他们。
@IanRoberts 我已经重新检查过了。在 Maven 中,$java.home 指向 jre 目录。所以上面的配置是正确的。另见***.com/questions/15279586/java-home-in-maven以上是关于Maven:POM.xml 中缺少工件 com.sun:tools:jar:1.6.0 编译时异常 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
由于 pom.xml 中的错误,无法使用 Maven 运行构建