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 ?

71
demandé sur Laurent 2010-06-20 22:29:41

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>
45
répondu sblundy 2013-11-25 13:20:50

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.

38
répondu Laurent 2010-06-20 20:59:05

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>
9
répondu Jianyu 2012-08-19 07:45:33

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>
7
répondu Animesh Sharma 2015-04-12 04:32:27

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>
1
répondu Marty 2017-12-14 14:47:05

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>
0
répondu user7610 2018-09-10 20:38:51

Ma solution:

  1. Mettez les outils du Soleil.jar au $JAVA_HOME/lib
  2. faire un lien symbolique dans le $JAVA_HOME/.. nommé lib où la cible sera $JAVA_HOME/lib
-11
répondu toTem 2012-01-02 07:40:31