JDK tools.jar作为maven的依赖

我想把JDK tools.jar当成编译依赖。 我发现了一些例子,说明如下使用systemPath属性:

<dependency> <groupId>com.sun</groupId> <artifactId>tools</artifactId> <scope>system</scope> <systemPath>${java.home}/../lib/tools.jar</systemPath> </dependency> 

问题在于Mac OS X的path不正确(但对Windows和Linux来说是正确的)。 对于它,正确的path是$ {java.home} /../ Classes / classes.jar

我正在寻找一种方法,以便定义一个maven属性,如果系统被检测为Mac Os X,则将值设置为$ {java.home} /../ Classes / classes.jar ,否则将其设置为$ {java.home} /../ lib / tools.jar (就像ANT可以做的那样)。 有人有一个想法吗?

这就是configuration文件的目的,提取属性的path,为Windows,OSX等设置configuration文件,并适当地定义属性值。

以下是讨论操作系统configuration文件的文档页面: Maven本地设置模型

最终应该看起来像这样:

  <profiles> <profile> <id>windows_profile</id> <activation> <os> <family>Windows</family> </os> </activation> <properties> <toolsjar>${java.home}/../lib/tools.jar</toolsjar> </properties> </profile> <profile> <id>osx_profile</id> <activation> <os> <family>mac</family> </os> </activation> <properties> <toolsjar>${java.home}/../Classes/classes.jar</toolsjar> </properties> </profile> </profiles> 

感谢您介绍我的mavenconfiguration文件。

我已经使用上面提到的configuration文件,并根据所需文件的存在激活configuration文件:

 <profiles> <profile> <id>default-profile</id> <activation> <activeByDefault>true</activeByDefault> <file> <exists>${java.home}/../lib/tools.jar</exists> </file> </activation> <properties> <toolsjar>${java.home}/../lib/tools.jar</toolsjar> </properties> </profile> <profile> <id>mac-profile</id> <activation> <activeByDefault>false</activeByDefault> <file> <exists>${java.home}/../Classes/classes.jar</exists> </file> </activation> <properties> <toolsjar>${java.home}/../Classes/classes.jar</toolsjar> </properties> </profile> </profiles> 

我发布了这个答案,突出了上一篇文章中的一个错误:属性部分只能在激活部分使用,以激活基于指定属性存在的configuration文件。 为了定义一个属性,属性部分必须像上面一样使用。

嗨,我知道你们都很聪明,但是让我花了几天的时间才弄清楚答案并不完整 – configuration文件和依赖关系是必须的。 我希望没有人再浪费时间。 请参阅下面的完整代码:

 <profiles> <profile> <id>osx_profile</id> <activation> <activeByDefault>false</activeByDefault> <os> <family>mac</family> </os> </activation> <properties> <toolsjar>${java.home}/../Classes/classes.jar</toolsjar> </properties> <dependencies> <dependency> <groupId>com.sun</groupId> <artifactId>tools</artifactId> <version>1.6.0</version> <scope>system</scope> <systemPath>${toolsjar}</systemPath> </dependency> </dependencies> </profile> </profiles> 

不知何故,Windows中的日食无法拿起{java.home}。 所以,我不得不设置JAVA_HOME而不是java.home。 在Run-> Run Configurations-> Environment中设置JAVA_HOME。 这对我来说是标准的JDK(不是Apple JDK)。

 <profiles> <profile> <id>windows-profile</id> <activation> <activeByDefault>true</activeByDefault> <file> <exists>${JAVA_HOME}/lib/tools.jar</exists> </file> </activation> <properties> <toolsjar>${JAVA_HOME}/lib/tools.jar</toolsjar> </properties> </profile> <profile> <id>mac-profile</id> <activation> <activeByDefault>false</activeByDefault> <file> <exists>${java.home}/../lib/tools.jar</exists> </file> </activation> <properties> <toolsjar>${java.home}/../lib/tools.jar</toolsjar> </properties> </profile> </profiles> <dependencies> <dependency> <groupId>jdk.tools</groupId> <artifactId>jdk.tools</artifactId> <version>jdk1.8.0</version> <scope>system</scope> <systemPath>${toolsjar}</systemPath> </dependency> </dependencies> 

我的解决scheme

  1. 把Sun的tools.jar放到$JAVA_HOME/lib
  2. $JAVA_HOME/..命名的lib中创build一个符号链接,其目标是$JAVA_HOME/lib