Maven:缺少工件com.sun:tools:jar:POM.xml中的1.6.0编译时exception

当我试图为工具添加依赖性时,我得到一个奇怪的问题并在我的pom.xml中获得编译时exception。 jar显示如下( Missing artifact com.sun:tools:jar:1.6.0

问题

我已将JAVA_HOME变量设置如下:

JAVA_HOME :C:\ Program Files \ Java \ jdk1.6.0_34

当我将它硬编码到JDK1.6的实际路径时,我没有发现任何错误,如下所示。

 com.sun tools 1.6.0 system C:\Program Files\Java\jdk1.6.0_34\lib\tools.jar  

但我知道这不是好习惯。 请求解决此错误的指导。

java.home是一个System属性,它通常指向jre目录,当你指向一个不存在的jar时,你会收到一个错误。

如果要在pom文件中引用环境变量,请使用以下语法。

 ${env.variable_name} 

在您的情况下,它应该是${env.JAVA_HOME} ,如下所示

  com.sun tools 1.6.0 system ${env.JAVA_HOME}/lib/tools.jar  

更新:正如词典提到的,这不适用于MAC,因为MAC JDK具有不同的文件结构。

在Maven中,$ {java.home}指向JDK使用的JRE目录,而不是JDK本身。 请看这个问题:

Maven中的Java_home

而不是

 ${java.home}/lib/tools.jar 

假定您应该使用的JDK目录

 ${java.home}/../lib/tools.jar 

但是,这只是解决方案的一半。 问题是在Mac下,目录结构不同。 您必须使用用户配置文件才能使您的构建可靠地跨平台工作。

请看这个问题:

JDK tools.jar作为maven依赖

而且,具体而言, 这个答案 (这是正确答案,而不是那里接受的OP)。

这就是Oracle在其中一个POM中处理它的方式:

   com.sun tools 1.6 system ${tools.jar}  

然后在profiles

  default-tools.jar   ${java.home}/../lib/tools.jar    ${java.home}/../lib/tools.jar    default-tools.jar-mac   ${java.home}/../Classes/classes.jar    ${java.home}/../Classes/classes.jar   

在Mac上,JDK具有不同的文件结构。 这就是您必须定义这些配置文件的原因。

另见以下post:

  • JDK tools.jar作为maven依赖
  • 构建错误:缺少工件com.sun:tools:jar:1.6
  • 缺少神器sun.jdk:tools:jar:1.6.0:system
  • 缺少工件com.sun:工具:jar:1.5.0 maven