JDK tools.jar作为maven依赖

时间:2010-06-20 18:29:41

标签: java maven-2 tools.jar

我想将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一样)。有人有想法吗?

8 个答案:

答案 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)

我的解决方案:

  1. 将Sun的tools.jar放到$JAVA_HOME/lib
  2. 在名为lib的$JAVA_HOME/..中创建一个符号链接,其中目标将为$JAVA_HOME/lib