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
- 把Sun的tools.jar放到
$JAVA_HOME/lib
- 在
$JAVA_HOME/..
命名的lib中创build一个符号链接,其目标是$JAVA_HOME/lib