JDK 工具.jar作为 maven 依赖项

2022-08-31 12:38:03

我想把JDK工具.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}/.。/类/类.jar

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


答案 1

这就是配置文件的用途,提取属性的路径,设置Windows,OSX等的配置文件,并相应地定义属性值。

这是讨论操作系统配置文件的文档页面: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>

答案 2

感谢您向我介绍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>

我发布这个答案是为了在上一篇文章中强调一个错误:属性部分只能在激活部分使用,以便根据指定属性的存在来激活配置文件。为了定义属性,必须像上面那样使用属性部分。


推荐