web-dev-qa-db-fra.com

Spécifier le JDK que Maven doit utiliser

J'essaie de construire un plugin Hudson que j'ai modifié et qui nécessite jdk1.6. C'est bien, mais je ne vois pas comment je peux dire à Maven où se trouve le jdk différent. J'ai trouvé peu de mentions sur Internet, mais elles ne semblent pas s'appliquer à moi. 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 1.6 pour toutes les versions de Maven.

Un problème, c’est que j’utilise mvn dans cygwin, si cela compte vraiment. Il semble que je devrais pouvoir faire la spécification dans le fichier pom du projet, mais le pom existant est plutôt dépouillé.

En fin de compte, y a-t-il un moyen de spécifier un jdk pour un seul appel de maven?

120
DanInDC

En fin de compte, y a-t-il un moyen de spécifier un jdk pour un seul appel de maven?

Modifiez temporairement votre Java_HOME.

120
Pascal Thivent

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

Disons que votre Java_HOME pointe sur 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) les lignes suivantes dans leur settings.xml, votre pom sera indépendant de la plate-forme:

<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>
73
Cerber

compile: compile possède ne propriété utilisateur qui vous permet de spécifier un chemin d'accès à la javac.

Notez que cette propriété utilisateur ne fonctionne que lorsque fork est true, ce qui correspond à false par défaut.

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

Vous devrez peut-être doubler la valeur si elle contient des espaces.

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

Voir aussi préséance des propriétés personnalisées Maven .

27
Jin Kwon

Comme vous l'avez dit "De plus, je ne veux pas utiliser la version 1.6 pour toutes les versions de Maven.".

<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 utilise cette version de jdk.

23
DevCoder

Je dis que vous configurez Java_HOME comme le dit Pascal: Dans cygwin, si vous utilisez bash comme shell devrait être "export Java_HOME =/cygdrive/c/pathtothejdk" Et il n’est jamais nuisible d’exporter également le Java bin dir le PATH avec "export PATH = $ {Java_HOME}/bin: $ {PATH}"

et ajoutez également maven-enforce-plugin pour vous 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>

http://maven.Apache.org/plugins/maven-enforcer-plugin/usage.html

14
feniix

Je sais que c'est un vieux fil. Mais je rencontrais des problèmes avec quelque chose de similaire à cela dans Maven pour Java 8 source du compilateur. J'ai compris cela avec une solution rapide mentionnée dans cet article pensais pouvoir le mettre ici et peut-être aider les autres:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>
11
Parth Joshi

Maven utilise la variable $ JAVACMD en tant que commande finale Java, définissez-la sur l'emplacement où l'exécutable Java basculera maven vers un JDK différent.

6
Lin Gao

Hudson vous permet également de définir plusieurs runtimes Java et de vous permettre d'appeler Maven avec l'un d'eux. Regardez de plus près sur la page de configuration.

Pour Java 9:

<build>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.7.0</version>
            <configuration>
                <source>9</source>
                <target>9</target>
            </configuration>
        </plugin>
    </plugins>
</build>
1
Jobanpreet Singh

J'ai eu un problème de construction avec maven dans Eclipse sous Windows 7.

Bien que j'ai observé mvn build fonctionnait parfaitement depuis la ligne de commande.

mvn -T 5 -B -e -X -U -P test clean install -Dmaven.surefire.debug  --settings ..\..\infra-scripts\maven-conf\settings.xml   > output.log

Eclipse considérait comme machine JVM par défaut une installation JRE au lieu de JDK, donc elle échouait lors de la compilation.

J'ai ajouté à Eclipse.ini la ligne suivante:

-vm
C:\Program Files (x86)\Java\jdk1.8.0_25\bin

Aussi, lors du démarrage d’Eclipse, j’utilisais la liste suivante de la section "Objectifs":

-T 5 -B -e -X -U -P test clean install -Dmaven.surefire.debug  --settings ..\..\infra-scripts\maven-conf\settings.xml

L'erreur de compilation a été résolue.

0
aprodan