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?
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.
Java_HOME
juste avant de démarrer maven (et le modifier ultérieurement si nécessaire). mvn
(non-Windows)/mvn.bat
/mvn.cmd
(Windows) et y définir explicitement votre version de Java.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>
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
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.
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
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.
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>
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.
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é.
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.
Sur Mac, (en supposant que la bonne version soit installée)
Java_HOME=`/usr/libexec/Java_home -v 1.8` mvn clean install -DskipTests
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é
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.
~/.mavenrc
export Java_HOME=$(/usr/libexec/Java_home -v 1.7)
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
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
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>