JDK tools.jar как зависимость maven - PullRequest
73 голосов
/ 20 июня 2010

Я хотел бы поместить 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 , в противном случае для установлено значение $ {java.home} /../ lib / tools.jar (как это можно сделать с ANT). У кого-нибудь есть идея?

Ответы [ 8 ]

45 голосов
/ 20 июня 2010

Для этого нужны профили, извлеките путь к свойству, настройте профили для 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>
39 голосов
/ 20 июня 2010

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

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

9 голосов
/ 19 августа 2012

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

<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>
7 голосов
/ 12 апреля 2015

Так или иначе, затмение в окнах не может поднять {java.home}. Поэтому мне пришлось установить JAVA_HOME вместо java.home. JAVA_HOME был установлен в Run-> Run Configurations-> 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>
3 голосов
/ 10 сентября 2018

Я нашел решение в Q: Объявляем зависимость maven от tools.jar для работы с 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>
1 голос
/ 14 декабря 2017

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

Вам нужен профиль И вам нужен 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>
0 голосов
/ 14 октября 2018

Правильные инструкции для начинающих

Сначала добавьте этот профиль в файл 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> Preferecnes> Установленные 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 \

поэтому измените его на JRE, поставляемый с JDK:

C: \ Program Files \ Java \ jdk1.8.0_181 \ jre

0 голосов
/ 24 августа 2010

Мое решение:

  1. Поместите Sun. tools.jar в $JAVA_HOME/lib
  2. , создайте символическую ссылку в $JAVA_HOME/.. названной lib, где target будет $JAVA_HOME/lib
...