JDK tools.jar как зависимость maven
Я хотел бы поместить 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 ответов
Спасибо за представление мне 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>
Я опубликовал этот ответ, чтобы выделить ошибку в предыдущем посте: раздел свойств можно использовать только в разделе активации, чтобы активировать профиль на основе существования указанного свойства. Для определения свойства необходимо использовать раздел свойств, как указано выше.
Для этого нужны профили, извлеките путь к свойству, настройте профили для 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>
Привет, я знаю, что вы, ребята, все умны, но мне пришлось пару дней, чтобы понять, что ответ не полный - необходим профиль и зависимость. Я надеюсь, что никто не будет тратить время на это снова. Пожалуйста, смотрите мой полный код ниже:
<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>
Я нашел решение в 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>
Так или иначе, затмение в окнах не может поднять {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>
Комментарий Эдварда верен.
Вам нужен профиль И вам нужен 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>
Правильные инструкции для начинающих
Сначала добавьте этот профиль в файл 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
Мое решение:
- положить инструменты Sun.jar в
$JAVA_HOME/lib
- сделать символическую ссылку в
$JAVA_HOME/..
по имени lib, где будет цель$JAVA_HOME/lib