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). У кого-то есть идея?
Ответы
Ответ 1
Для чего предназначены профили, извлеките путь к свойству, настройте профили для окон, OSX и т.д. и определите значения свойств соответствующим образом.
Здесь страница документа, в которой обсуждаются профили для ОС: Maven Local Settings Model
Он должен выглядеть так:
<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>
Я отправил этот ответ, чтобы выделить ошибку в предыдущем сообщении: раздел свойств можно использовать только в разделе активации, чтобы активировать профиль, основанный на существовании указанного свойства. Чтобы определить свойство, необходимо использовать раздел свойств, как указано выше.
Ответ 3
Привет, я знаю, что вы, ребята, все умны, но это вызвало у меня пару дней, чтобы выяснить, что ответ не завершен - необходим профиль и зависимость. Надеюсь, никто не будет тратить время на это снова. См. Мой полный код ниже:
<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>
Ответ 4
Каким-то образом затмение в окнах не может забрать {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>
Ответ 5
Комментарий Эдварда правильный.
Вам нужен профиль И вам нужно 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>
Ответ 6
мое решение:
- поместите инструмент sun.jar в
$JAVA_HOME/lib
- сделать символическую ссылку в
$JAVA_HOME/..
named lib, где target будет $JAVA_HOME/lib