Инструменты JDK.jar как зависимость maven


Я хотел бы поставить инструменты 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.домашний./}./Классы/классы.банку.

Я ищу способ определить свойство maven таким образом, что если система обнаружена как Mac Os X, значение равно ${java.домашний./}./Классы/классы.банку, в противном случае он установлен до ${java.домашний./}./Либ/инструменты.банку (как это можно сделать с муравьем). У кого-то есть идея ?

7 71

7 ответов:

вот для чего нужны профили, извлеките путь к свойству, настройте профили для 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>

Спасибо, что представили мне профили 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>

я опубликовал этот ответ, чтобы выделить ошибку в предыдущем сообщении: раздел свойств можно использовать только в разделе активации, чтобы активировать профиль на основе существования указанного свойства. Чтобы определить свойство, раздел Свойства должен использоваться следующим образом выше.

Привет я знаю, что вы, ребята, все умные, но это заставило меня пару дней, чтобы выяснить, что ответ не является полным - и профиль, и зависимость необходимы. Я надеюсь, что никто не будет тратить время на это снова. Пожалуйста, смотрите мой полный код ниже:

<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.домашний.} Итак, мне пришлось установить JAVA_HOME вместо java.жилище. JAVA_HOME был установлен в Run->Run Configuration - >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>

комментарий Эдвард является правильным.

вам нужен профиль и вам нужно 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>

Я нашел решение в Q:объявить зависимость maven от инструментов.jar для работы на JDK 9

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>

мое решение:

  1. положите инструменты Солнца.баночка к $JAVA_HOME/lib
  2. сделайте символическую ссылку в $JAVA_HOME/.. имя lib, где цель будет $JAVA_HOME/lib