我想将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的路径不正确(但对Windows和Linux来说是正确的)。对于它,正确的路径是 $ {java.home} /../ Classes / classes.jar 。
我正在寻找一种方法来定义maven属性,这样如果系统被检测为Mac Os X,则值设置为 $ {java.home} /../ Classes / classes.jar < / strong>,否则将设置为$ {java.home} /../ lib / tools.jar (就像可以使用ANT一样)。有人有想法吗?
答案 0 :(得分:45)
这是配置文件的用途,提取属性的路径,设置窗口的配置文件,OSX等,并适当地定义属性值。
以下是讨论操作系统配置文件的文档页面:Maven Local Settings Model
它应该最终看起来像这样:
<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>
答案 1 :(得分:39)
感谢您向我介绍maven个人资料。
我使用了上面提到的配置文件,并根据所需文件的存在来激活配置文件:
<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>
我发布了这个答案,以突出显示上一篇文章中的错误:属性部分只能在激活部分中使用,以便根据指定属性的存在激活配置文件。为了定义属性,必须像上面一样使用属性部分。
答案 2 :(得分:9)
嗨,我知道你们都很聪明,但是我花了几天时间才弄清楚答案是不完整的 - 个人资料和依赖性都是必要的。我希望没有人会再次浪费时间。请参阅下面的完整代码:
<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>
答案 3 :(得分:7)
不知何故,windows中的eclipse无法获取{java.home}。所以,我不得不设置JAVA_HOME而不是java.home。 JAVA_HOME设置在Run-&gt; Run Configurations-&gt; Environment中。这对我来说是标准的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>
答案 4 :(得分:3)
我在问题Declare maven dependency on tools.jar to work on JDK 9
中找到了解决方案由于实际的Maven巫术非常复杂,对于新手来说还是令人惊讶的,并且是未来需要改进的主题,因此最好不要将其共同粘贴。因此,该模块存在,因此您不必了解或关心细节。 ~~ https://github.com/olivergondza/maven-jdk-tools-wrapper
<dependency>
<groupId>com.github.olivergondza</groupId>
<artifactId>maven-jdk-tools-wrapper</artifactId>
<version>0.1</version>
</dependency>
答案 5 :(得分:1)
Edward的评论是正确的。
您需要个人资料并且您需要dependency
区域之外的profiles
。
该配置文件仅确定将获得的值${toolsjar}
。
<dependencies>
<dependency>
<groupId>jdk.tools</groupId>
<artifactId>jdk.tools</artifactId>
<version>jdk1.8.0</version>
<scope>system</scope>
<systemPath>${toolsjar}</systemPath>
</dependency>
</dependencies>
答案 6 :(得分:0)
适合初学者的正确说明
首先将此配置文件添加到标签上方或其中其他位置的Pom.xml文件中。
<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>
然后选择正确的JRE路径
转到:
Windows>首选项>已安装的JRE
选择已安装的JRE并双击它,或者从右键菜单中单击“编辑”,然后确保JRE Home路径在JDK中,例如:
C:\ Program Files \ Java \ jdk1.8.0_181 \ jre
如果单独安装了JRE,则eclipse会选择独立的JRE,例如:
C:\ Program Files \ Java \ jre1.8.0_181 \
因此将其更改为JDK随附的JRE:
C:\ Program Files \ Java \ jdk1.8.0_181 \ jre
答案 7 :(得分:-11)
我的解决方案:
$JAVA_HOME/lib
$JAVA_HOME/..
中创建一个符号链接,其中目标将为$JAVA_HOME/lib