Come impostare una versione specifica di Java su Maven


166

Sul mio computer ho installato due versioni java: (1.6 e 1.7 installate manualmente da me). Ho bisogno di entrambi per progetti diversi. Ma per Maven ho bisogno di 1.7, ora il mio Maven usa la versione 1.6 di Java, come posso impostare Maven per usare 1.7?


Non riesco ad esportare JAVA_HOME con Java 1.7 perché non riesco a toccare la configurazione della mia macchina, la versione predefinita di Java deve essere 1.6.
e il

Maven utilizza JAVA_HOME, quindi non pensare che ciò che vuoi fare sia possibile senza modificare il valore JAVA_HOME.
Zyga,

1
Stai usando un IDE o la riga di comando? Sei su un * nix o windows?
xwoker,

1
Questa risposta copre ciò che vuoi? stackoverflow.com/a/4724062/1570834
DB5

Sì, è utile, ma non riesco a fare le battute al progetto, tuttavia la roba è la stessa e la risposta è corretta
Pat

Risposte:


142

Maven usa il JAVA_HOMEparametro per trovare quale versione Java dovrebbe eseguire. Vedo dal tuo commento che non puoi modificarlo nella configurazione.

  • È possibile impostare il JAVA_HOMEparametro appena prima di avviare maven (e cambiarlo successivamente se necessario).
  • Potresti anche andare nel tuo mvn(non windows) / mvn.bat/ mvn.cmd(windows) e impostare la tua versione java esplicitamente lì.

29
@andPat: così? È possibile impostare JAVA_HOMEnella shell locale senza modificare affatto la configurazione della macchina (non appena si chiude quella shell, la modifica è andata). Puoi anche cambiarlo con un singolo comando:JAVA_HOME=/path/to/jdk17/ mvn build
Joachim Sauer,

@JoachimSauer: Sì, ma avevo anche fatto un riferimento a mvn.bat, che è specifico di Windows.
Daniel Barbarian,

Su Mac puoi creare un file .mavenrc con JAVA_HOME all'interno
Ronan Quillevere,

Vecchio, ma con i miei 2 centesimi. Sto lavorando su un servizio Java 8 che viene chiamato da un'applicazione Java 7. Per evitare di dover cambiare costantemente durante la creazione, I (su Windows) ho creato una variabile d'ambiente MVN_JAVA_HOME e quindi ho sostituito ogni ricorrenza di JAVA_HOME con MVN_JAVA_HOME all'interno di mvn e mvn.cmd.
ryanlutgen,

75

Nel POM, è possibile impostare le proprietà del compilatore, ad esempio per 1.8:

<project>
...
 <properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>
...
</project>

10
A partire dalla versione 3.7.0 del plug-in per compilatore, i valori predefiniti per origine e destinazione se non specificati sono 1.5
crowne,

59

Aggiunta di una soluzione per persone con più versioni Java installate

Abbiamo una base di codice di grandi dimensioni, la maggior parte dei quali è in Java. La maggior parte di ciò su cui lavoro è scritta in Java 1.7 o 1.8. Poiché JAVA_HOMEè statico, ho creato alias nel mio .bashrcper eseguire Maven con valori diversi:

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"

Questo mi consente di eseguire Maven dalla riga di comando sulla mia macchina di sviluppo indipendentemente dalla versione JDK utilizzata nel progetto.


2
A meno che tu non abbia bisogno della maven 2 e 3 per vari progetti, nel qual caso hai già mvn2e mvn3definito e la denominazione diventa un po 'funky quando entrano in gioco anche le versioni Java ...: D
Tomislav Nakic-Alfirevic

3
Se stai usando un Mac, il tuo JDK viene fornito con il comando java_home in modo da poter evitare percorsi alias mvn8 = "JAVA_HOME=`/usr/libexec/java_home -v 1.8` && mvn
hardcoding

5
Su (ubuntu + bash), devi omettere il &&prima mvn. mvn non vede il valore di JAVA_HOME con &&.
Fabien

@Fabien buono a sapersi; Uso ZSH e non sapevo delle differenze di Bash
Jonathan Landrum l'

47

Su Windows

Se non si desidera modificare la JAVA_HOMEvariabile all'interno delle variabili di sistema.

Modifica il tuo mvn.batfile e aggiungi una linea come questa

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

Questo può essere fatto dopo @REM ==== START VALIDATION ====come menzionato da @Jonathan

Su Mac (e Linux?)

Se non si desidera modificare la JAVA_HOMEvariabile all'interno di ~/.bashrco~/.bash_profile

puoi creare un ~/.mavenrcfile e ridefinire il tuo JAVA_HOMEusando lo strumento java_home

export JAVA_HOME=`/usr/libexec/java_home -v 1.7.0_45`

Controllo sanitario

Puoi verificare che tutto funzioni correttamente eseguendo i seguenti comandi. La versione jdk dovrebbe essere diversa.

mvn -version

poi

java -version


L'ho impostato per impostare JAVA_HOME = C: \ Programmi \ Java \ jdk1.7.0_45 escluso la sottocartella jre.
nanosoft,

32

Aggiungendo i miei due centesimi e fornendo esplicitamente la soluzione.

Ho due JDK installati sul mio computer Windows - JDK 1.5e JDK 1.6.

Il mio valore predefinito (e impostato sulla variabile di ambiente di sistema di Windows) JAVA_HOMEè impostato su JDK 1.5.

Tuttavia, ho un progetto maven che devo costruire (ad esempio, Etsy.com di JBehave Tutorial ) usando JDK 1.6.

La mia soluzione in questo scenario (che ha funzionato!), È come suggerito da @DanielBarbarianimpostarlo mvn.bat.

Per alcuni che non hanno familiarità con il file batch di Windows, ho semplicemente aggiunto la set JAVA_HOME=<path_to_other_jdk>riga dopo @REM ==== START VALIDATION ====in mvn.bat(cioè, %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

4
In maven 3.5, mvn.batviene rinominato in mvn.cmd.
CKM,

30

Di recente, dopo sette lunghi anni con Maven, ho imparato a conoscere toolchains.xml. Maven lo ha persino documentato e lo supporta dalla 2.0.9 - documentazione per toolchains

Quindi ho aggiunto un file toolchain.xml alla mia cartella ~ / .m2 / con il seguente contenuto:

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

Ti permette di definire quali diversi JDK Maven può usare per costruire il progetto indipendentemente dal JDK Maven con cui viene eseguito. Un po 'come quando si definisce JDK a livello di progetto in IDE.


2
La migliore risposta,! Grazie. Questo spiega una chiara situazione in cui vogliamo eseguire Maven e il progetto in fase di compilazione con due diversi runtime / framework java.
Soundararajan,

5

Una semplice soluzione al problema:

JAVA_HOME = / usr / lib / jvm / java-6-sun / mvn clean install

Su Mac, sarebbe simile a:

JAVA_HOME = / Library / Java / JavaVirtualMachines / jdk1.7.0_21.jdk / Contenuti / Home / mvn clean install

PS: Un caso speciale che ho riscontrato è che il comando sopra indicato non funziona sulla shell "fish". Avevo anche disponibile la shell bash e ha funzionato bene lì. basta usare il comando 'bash' per passare alla shell bash.


5

È possibile configurare origini di compilazione utilizzando JDK diverso con maven-compiler-plugin.

Basta specificare il percorso javacnel <executable>tag. Ad esempio per java11 sembra:

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

5

Senza modificare le variabili di ambiente, è possibile gestire la versione java in base al livello del progetto utilizzando il plug-in del compilatore Maven.

Metodo 1

<properties>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
</properties>
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

Metodo 2

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

4

Per evitare qualsiasi impatto sul progetto e sulle variabili di ambiente, è possibile configurare il plug-in del compilatore Maven solo sulla POM del progetto, specificando la versione java di origine e destinazione

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

4

Puoi impostare Maven per utilizzare qualsiasi versione java seguendo le istruzioni seguenti.

Installa jenv nel tuo link alla macchina

Controllare le versioni java disponibili installate nel computer eseguendo il seguente comando nella riga di comando.

versioni jenv

È possibile specificare la versione globale di Java usando il comando seguente.

jenv global oracle64-1.6.0.39

È possibile specificare la versione Java locale per qualsiasi directory (Progetto) utilizzando il seguente comando nella directory nella riga di comando.

jenv local oracle64-1.7.0.11

aggiungi la versione java corretta nel tuo pom.xml

se stai eseguendo maven nella riga di comando, installa il plugin jenv maven usando il comando seguente

jenv enable-plugin maven

Ora puoi configurare qualsiasi versione java nel tuo computer per qualsiasi progetto senza alcun problema.


1
come questa opzione. jenv è come virtualenv per Python
Jesse Zhuang

4

Su Mac, (supponendo che tu abbia installato la versione giusta)

JAVA_HOME=`/usr/libexec/java_home -v 1.8` mvn clean install -DskipTests


2

Su Windows, aggiungo solo più file batch per diverse versioni JDK alla cartella bin Maven in questo modo:

mvn11.cmd

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

quindi è possibile utilizzare mvn11per eseguire Maven nel JDK specificato.



1

Non ho avuto successo su Mac con la sola impostazione JAVA_HOMEnella console, ma ho avuto successo con questo approccio

  • Crea il file .mavenrc nella tua directory home (quindi il percorso sarà il file ~/.mavenrc
  • In quel file incolla export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)

0

Inoltre puoi avere due versioni di Maven installate e modificarne una , modificando qui:

mvn (non-Windows) /mvn.bat/mvn.cmd (finestre)

sostituendo le tue% java_home% apparenze al tuo percorso java desiderato. Quindi esegui solo Maven da quel percorso modificato

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.