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