web-dev-qa-db-fra.com

Comment définir une version Java spécifique sur Maven

Deux versions de Java sont installées sur ma machine: (1.6 et 1.7 installées manuellement par moi). J'ai besoin des deux pour différents projets. Mais pour Maven, j’ai besoin de la version 1.7. Maintenant, mon Maven utilise la version 1.6 de Java. Comment puis-je configurer Maven pour utiliser la version 1.7? 

105
andPat

Maven utilise le paramètre Java_HOME pour rechercher la version de Java qu’il est censé exécuter. Je vois dans votre commentaire que vous ne pouvez pas changer cela dans la configuration. 

  • Vous pouvez définir le paramètre Java_HOME juste avant de démarrer maven (et le modifier ultérieurement si nécessaire). 
  • Vous pouvez également aller dans votre mvn (non-Windows)/mvn.bat/mvn.cmd (Windows) et y définir explicitement votre version de Java.
89
DanielBarbarian

Dans le POM, vous pouvez définir les propriétés du compilateur, par exemple. pour 1.8:

<project>
...
 <properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>
...
</project>
40
Edward Ross

Ajouter mes deux sous et fournir explicitement la solution.

J'ai deux JDK installés sur ma machine Windows: JDK 1.5 et JDK 1.6.

Ma valeur par défaut (et définie sur la variable d'environnement système Windows) Java_HOME est définie sur JDK 1.5.

Cependant, j'ai un projet maven que j'ai besoin de construire (c'est-à-dire, Etsy.com de JBehave Tutorial en utilisant JDK 1.6.

Ma solution dans ce scénario (qui a fonctionné!), Est comme suggéré par @DanielBarbarian pour le définir dans mvn.bat

Pour ceux qui ne sont pas familiers avec le fichier de commandes de window, j’ai simplement ajouté la ligne set Java_HOME=<path_to_other_jdk> après @REM ==== START VALIDATION ==== dans mvn.bat (c’est-à-dire, %MAVEN_HOME%\bin\mvn.bat):

@REM ==== START VALIDATION ====
set Java_HOME=C:\Program Files\Java\jdk1.6.0_45\jre
if not "%Java_HOME%" == "" goto OkJHome
29
Jonathan

Ajout d'une solution pour les personnes avec plusieurs versions de Java installées

Nous avons une grande base de code, dont la plupart est en Java. La majorité de ce que je travaille est écrit en Java 1.7 ou 1.8. Puisque Java_HOME est statique, j'ai créé des alias dans mon .bashrc pour exécuter Maven avec différentes valeurs:

alias mvn5="Java_HOME=/usr/local/Java5 && mvn"
alias mvn6="Java_HOME=/usr/local/Java6 && mvn"
alias mvn7="Java_HOME=/usr/local/Java7 && mvn"
alias mvn8="Java_HOME=/usr/local/Java8 && mvn"

Cela me permet d'exécuter Maven à partir de la ligne de commande sur ma machine de développement, quelle que soit la version du JDK utilisée dans le projet.

26
Jonathan Landrum

Sur les fenêtres 

Si vous ne souhaitez pas modifier votre variable Java_HOME dans les variables système.

Editez votre fichier mvn.bat et ajoutez une ligne comme celle-ci

set Java_HOME=C:\Program Files\Java\jdk1.7.0_45\jre

Cela peut être fait après @REM ==== START VALIDATION ==== comme mentionné par @Jonathan

Sur Mac (& Linux?)

Si vous ne souhaitez pas modifier votre variable Java_HOME dans votre ~/.bashrc ou ~/.bash_profile

vous pouvez créer un fichier ~/.mavenrc et redéfinir votre Java_HOME à l'aide de l'outil Java_home

export Java_HOME=`/usr/libexec/Java_home -v 1.7.0_45`

Verification sanitaire

Vous pouvez vérifier que tout fonctionne correctement en exécutant les commandes suivantes. La version de jdk devrait être différente.

mvn -version

puis

Java -version

24
Ronan Quillevere

Récemment, après sept longues années chez Maven, je me suis renseigné sur toolchains.xml. Maven l’a même documentée et supportée à partir de la version 2.0.9 - toolchains documentation

J'ai donc ajouté un fichier toolchain.xml à mon dossier ~/.m2/avec le contenu suivant:

<toolchains xmlns="http://maven.Apache.org/TOOLCHAINS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.Apache.org/TOOLCHAINS/1.1.0 http://maven.Apache.org/xsd/toolchains-1.1.0.xsd">
 <!-- JDK toolchains -->
 <toolchain>
   <type>jdk</type>
   <provides>
     <version>1.8</version>
     <vendor>Sun</vendor>
   </provides>
   <configuration>
     <jdkHome>/opt/Java8</jdkHome>
   </configuration>
 </toolchain>
 <toolchain>
   <type>jdk</type>
   <provides>
     <version>1.7</version>
     <vendor>Sun</vendor>
   </provides>
   <configuration>
     <jdkHome>/opt/Java7</jdkHome>
   </configuration>
 </toolchain>
</toolchains>

Il vous permet de définir les différents JDK que Maven peut utiliser pour construire le projet, quel que soit le JDK utilisé par Maven. Un peu comme lorsque vous définissez JDK au niveau du projet dans l'EDI.

16
Ondrej Burkert

Pour éviter tout impact sur votre projet et vos variables d'environnement, vous pouvez configurer le plug-in Maven Compiler uniquement sur le POM du projet, en spécifiant les versions Java source et cible. 

  <plugins>
    <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.5.1</version>
        <configuration>
            <source>1.7</source>
            <target>1.7</target>
        </configuration>
    </plugin>
    ...
  </plugins>
3
Tonino

Une solution simple au problème -

Java_HOME =/usr/lib/jvm/installation propre de Java-6-Sun/mvn

Sur Mac, cela ressemblerait à quelque chose comme: 

Java_HOME =/Bibliothèque/Java/JavaVirtualMachines/jdk1.7.0_21.jdk/Sommaire/Accueil/mvn clean install

PS: Un cas particulier que j’ai trouvé est la commande donnée ci-dessus ne fonctionne pas sur Shell. J'ai également eu bash Shell disponible et cela a bien fonctionné là-bas. utilisez simplement la commande 'bash' pour passer à bash Shell.

3
Pankaj

Sous Windows, je viens d'ajouter plusieurs fichiers de commandes pour différentes versions de JDK dans le dossier Maven bin, comme ceci:

mvn11.cmd

@echo off
setlocal
set "Java_HOME=path\to\jdk11"
set "path=%Java_HOME%;%path%"
mvn %*

vous pouvez ensuite utiliser mvn11 pour exécuter Maven dans le JDK spécifié.

1
Guo Ferrell

Vous pouvez configurer Maven pour utiliser n’importe quelle version Java en suivant les instructions ci-dessous.

Installez jenv sur votre machine link

Vérifiez les versions disponibles de Java installées sur votre ordinateur en exécutant la commande suivante en ligne de commande.

versions jenv

Vous pouvez spécifier la version globale Java à l'aide de la commande suivante.

jenv global Oracle64-1.6.0.39

Vous pouvez spécifier la version locale Java de tout répertoire (Projet) à l'aide de la commande suivante dans le répertoire en ligne de commande.

jenv local Oracle64-1.7.0.11

ajoutez la version correcte Java dans votre pom.xml

si vous utilisez maven en ligne de commande, installez le plugin jenv maven à l’aide de la commande ci-dessous

jenv enable-plugin maven

Vous pouvez maintenant configurer n’importe quelle version de Java de votre ordinateur pour n’importe quel projet sans problème.

1
Ranuka

Sur Mac, (en supposant que la bonne version soit installée)

Java_HOME=`/usr/libexec/Java_home -v 1.8` mvn clean install -DskipTests

0
user2475448

Aussi, vous pouvez avoir deux versions de maven installées, et éditer un d'entre elles, éditer ici:

mvn (non-windows) /mvn.bat/mvn.cmd (windows) 

remplacement de vos apparences% Java_home% par votre chemin Java souhaité. Ensuite, exécutez simplement maven à partir de ce chemin modifié

0
Alberto Perez

Je n’ai pas eu de succès sur mac avec seulement le réglage de Java_HOME dans la console, mais j’ai réussi avec cette approche.

  • Créez un fichier .mavenrc dans votre répertoire personnel (le chemin du fichier sera donc ~/.mavenrc
  • Dans ce fichier, collez export Java_HOME=$(/usr/libexec/Java_home -v 1.7)
0
Martin Vich

Sous Linux/Unix, le script Java_HOME dans le script 'mvn' est remplacé par les paramètres de

$HOME/.mavenrc

please Où ajouter les variables de chemin Java_HOME et MAVEN dans linux

0
Bernhard Thalmayr

Pour Java 11, vous devez définir

<Java.version>11</Java.version>

et pas 

<Java.version>1.11</Java.version>

ou vous pouvez aussi avoir cette erreur

0
Andrew Spencer

Vous pouvez configurer compiler des sources en utilisant différents JDK avec maven-compiler-plugin.

Spécifiez simplement le chemin d'accès à javac dans la balise <executable>. E.g pour Java11, il ressemble à:

<plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.0</version>
    <configuration>
        <source>11</source>
        <target>11</target>
        <fork>true</fork>
        <executable>C:\Program Files\Java\jdk-11.0.1\bin\javac</executable> <!--PATH TO JAVAC -->
    </configuration>
</plugin>
0
Ruslan