184 votes

Spécifier le JDK à utiliser par Maven

J'essaie de construire un plugin Hudson que j'ai modifié et qui nécessite jdk1.6. C'est très bien, mais je ne vois pas comment je peux dire à maven où se trouve le jdk différent. J'ai trouvé quelques mentions sur internet mais elles ne semblent pas s'appliquer à mon cas. Certains suggèrent d'ajouter une configuration à .m2/settings.xml mais je n'ai pas de settings.xml . De plus, je ne veux pas utiliser la version 1.6 pour tous les builds maven.

Le problème, c'est que j'utilise mvn en cygwin, si cela a une quelconque importance. Il semble que je devrais pouvoir faire la spécification dans le fichier pom du projet, mais le pom existant est assez vide.

Donc, en fin de compte, existe-t-il un moyen de spécifier un jdk pour une invocation unique de maven ?

186voto

Pascal Thivent Points 295221

Donc, en fin de compte, existe-t-il un moyen de spécifier un jdk pour une invocation unique de maven ?

Modifier temporairement la valeur de votre JAVA_HOME variable d'environnement.

103voto

Cerber Points 854

Il semble que maven donne maintenant une solution ici : Compilation de sources utilisant un JDK différent

Supposons que votre JAVA_HOME pointe vers JDK7 (qui exécutera les processus maven)

Votre pom.xml pourrait être :

<build>
    <plugins>
        <!-- we want JDK 1.6 source and binary compatiblility -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>
        <!-- ... -->
        <!-- we want sources to be processed by a specific 1.6 javac -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
              <verbose>true</verbose>
              <fork>true</fork>
              <executable>${JAVA_1_6_HOME}/bin/javac</executable>
              <compilerVersion>1.3</compilerVersion>
            </configuration>
        </plugin>
    </plugins>
</build>

Si vos développeurs ajoutent (et personnalisent) simplement les lignes suivantes dans leur fichier settings.xml Votre pom sera indépendant de la plateforme :

<settings>
  [...]
  <profiles>
    [...]
    <profile>
      <id>compiler</id>
        <properties>
          <JAVA_1_4_HOME>C:\Program Files\Java\j2sdk1.4.2_09</JAVA_1_4_HOME>
          <JAVA_1_6_HOME>C:\Program Files\Java\j2sdk1.6.0_18</JAVA_1_6_HOME>
        </properties>
    </profile>
  </profiles>
  [...]
  <activeProfiles>
    <activeProfile>compiler</activeProfile>
  </activeProfiles>
</settings>

54voto

Jin Kwon Points 2191

compiler:compiler a une propriété de l'utilisateur qui vous permet de spécifier un chemin vers le fichier javac .

Notez que cette propriété de l'utilisateur ne fonctionne que lorsque fork es true qui est false par défaut.

$ mvn -Dmaven.compiler.fork=true -Dmaven.compiler.executable=/path/to/the/javac compile

Il se peut que vous deviez mettre la valeur entre guillemets si elle contient des espaces.

> mvn -Dmaven.compiler.fork=true -Dmaven.compiler.executable="C:\...\javac" compile

Voir aussi Priorité des propriétés personnalisées Maven .

23voto

DevCoder Points 29

Comme vous l'avez dit "De plus, je ne veux pas utiliser la version 1.6 pour tous les builds maven."....Donc mieux vaut modifier votre fichier pom et spécifier la version du jdk à utiliser.

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.7.0</version>
            <configuration>
                <source>1.9</source>
                <target>1.9</target>
            </configuration>
        </plugin>
    </plugins>
</build>

Cela garantira que votre projet particulier utilise cette version de jdk.

17voto

Amarald Points 273

Je propose que vous mettiez en place le JAVA_HOME comme le dit Pascal : Dans Cygwin, si vous utilisez bash comme interpréteur de commandes :

export JAVA_HOME=/cygdrive/c/pathtothejdk

Il n'est jamais inutile d'en faire autant précéder la java bin le chemin d'accès au répertoire PATH avec la variable d'environnement :

export PATH=${JAVA_HOME}/bin:${PATH}

Ajouter également maven-enforce-plugin pour s'assurer que le bon JDK est utilisé. C'est une bonne pratique pour votre pom.

<build>
 <plugins>
   <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-enforcer-plugin</artifactId>
      <executions>
        <execution>
          <id>enforce-versions</id>
          <goals>
            <goal>enforce</goal>
          </goals>
          <configuration>
            <rules>
              <requireJavaVersion>
                <version>1.6</version>
              </requireJavaVersion>
            </rules>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

Veuillez consulter Plugin Maven Enforcer - Utilisation .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X