Outils JDK.jar comme dépendance maven
Je voudrais mettre des outils JDK.jar comme dépendance de compilation. J'ai trouvé quelques exemples qui indiquent d'utiliser la propriété systemPath comme suit:
<dependency>
<groupId>com.sun</groupId>
<artifactId>tools</artifactId>
<scope>system</scope>
<systemPath>${java.home}/../lib/tools.jar</systemPath>
</dependency>
Le problème est que Le chemin n'est pas correct pour Mac Os X (cependant, il est correct pour Windows et Linux). Pour cela, le chemin correct est ${java.maison}/../Catégories/classes.jar .
Je cherche un moyen de définir une propriété maven telle que si le système est détecté sous Mac Os X, la valeur est définie sur ${java.maison}/../Catégories/classes.jar , sinon il est défini sur ${java.maison}/../lib/outils.jar (comme il est possible de le faire avec ANT). Quelqu'un a une idée ?
7 réponses
Voilà à quoi servent les profils, extrayez le chemin d'accès à une propriété, configurez les profils pour windows, OSX, etc., et définissez les valeurs de propriété de manière appropriée.
Voici la page doc qui discute des profils pour les systèmes D'exploitation: Maven Local Settings Model
Il devrait endup regarder quelque chose comme ceci:
<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>
Merci de me présenter les profils maven.
J'ai utilisé le profil comme mentionné ci-dessus et en activant un profil basé sur la présence du fichier désiré:
<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>
J'ai posté cette réponse pour mettre en évidence une erreur dans le post précédent: la section de propriété ne peut être utilisée que dans la section d'activation afin d'activer un profil basé sur l'existence de la propriété spécifiée. Pour définir une propriété, la section Propriétés doit être utilisée comme ci-dessus.
Salut, je sais que vous êtes tous intelligents, mais cela m'a fait comprendre que la réponse n'est pas complète - le profil et la dépendance sont nécessaires. J'espère que personne ne perdra de temps à ce sujet à nouveau. Veuillez voir mon code complet ci-dessous:
<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>
En Quelque sorte, l'éclipse dans windows ne parvient pas à ramasser {java.maison}. Donc, j'ai dû définir JAVA_HOME au lieu de java.maison. JAVA_HOME a été défini dans Run - >Run Configurations- > Environment. Cela a fonctionné pour moi avec JDK standard (Pas 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>
Le commentaire de Edward est correct.
Vous avez besoin du profil et vous avez besoin du dependency
en dehors du bloc profiles
.
Le profil détermine juste quelle valeur ${toolsjar}
va obtenir.
<dependencies>
<dependency>
<groupId>jdk.tools</groupId>
<artifactId>jdk.tools</artifactId>
<version>jdk1.8.0</version>
<scope>system</scope>
<systemPath>${toolsjar}</systemPath>
</dependency>
</dependencies>
J'ai trouvé une solution dans Q: déclarer la dépendance maven sur les outils.jar pour travailler sur JDK 9
Comme la magie Maven réelle est assez élaborée, surprenante pour les nouveaux arrivants et un sujet d'améliorations futures,il vaut mieux ne pas co copier-coller autour. Par conséquent, ce module existe de sorte que vous n'avez pas à connaître ou à vous soucier des détails. ~~ 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>
Ma solution:
- Mettez les outils du Soleil.jar au
$JAVA_HOME/lib
- faire un lien symbolique dans le
$JAVA_HOME/..
nommé lib où la cible sera$JAVA_HOME/lib