Perché Maven usa JDK 1.6 ma la mia versione java è 1.7


159

Sono nuovo di Maven e anche di MacOS.

Ho installato maven nel mio terminale e quando ottengo le impostazioni della versione (usando mvn -v) sembra che usi JDK 1.6, mentre ho installato JDK 1.7. C'è qualcosa che non va?

I comandi che inserisco sono questi:

blues:helloworld Ninja$ java -version
java version "1.7.0_05"
Java(TM) SE Runtime Environment (build 1.7.0_05-b06)
Java HotSpot(TM) 64-Bit Server VM (build 23.1-b03, mixed mode)`
blues:helloworld Ninja$ mvn -v
Apache Maven 3.1.0 (893ca28a1da9d5f51ac03827af98bb730128f9f2; 2013-06-28 10:15:32+0800)
Maven home: /usr/local/Cellar/maven/3.1.0/libexec
Java version: 1.6.0_51, vendor: Apple Inc.
Java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Default locale: zh_CN, platform encoding: EUC_CN
OS name: "mac os x", version: "10.8.4", arch: "x86_64", family: "mac"

2
Puoi pubblicare le tue variabili PATH e JAVA_HOME?
Jeanne Boyarsky,

@JeanneBoyarsky blues: helloworld Ninja $ echo $ JAVA_HOME blues: helloworld Ninja $ echo $ PATH / usr / bin: / bin: / usr / sbin: / sbin: / usr / local / bin: / usr / local / git / bin
Ninja,

@JeanneBoyarsky vuoi questo, signore?
Ninja,

3
Sono femmina (quindi riferirmi come "signore" non è corretto) e sì. Prova a impostare il tuo JAVA_HOME. Il tuo problema sembra simile a questo problema: stackoverflow.com/questions/13752519/…
Jeanne Boyarsky,

2
@JeanneBoyarsky Perdona la mia maleducazione. L'url che hai dato è il problema che incontro.Grazie mille ~
Ninja

Risposte:


227

aggiungi quanto segue al tuo ~/.mavenrc:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/{jdk-version}/Contents/Home

Seconda soluzione:

echo export "JAVA_HOME=\$(/usr/libexec/java_home)" >> ~/.bash_profile


Sì, la tua risposta è corretta. È richiesto il JAVAHOME. Modifico invece il profilo / etc /
Ninja

8
Bene, l'aggiunta a ~ / .mavenrc assicura che altre app non siano interessate. Solo mvn prende questa versione di JDK. :)
Gaurav Vaish,

43
export JAVA_HOME = $ (/ usr / libexec / java_home -v 1.7)
jla

1
La soluzione .mavenrc ha funzionato perfettamente per me. Mi sono anche reso conto che avevo installato solo JDK 1.8 e non JRE 1.8. Grazie Gaurav!
timothyclifford,

2
Se stai usando jenv su un mac, può essere: export JAVA_HOME="$HOME/.jenv/versions/`jenv version-name`"per ~/.mavenrcfile.
Eddy,

46

Entrare dentro

/System/Library/Frameworks/JavaVM.framework/Versions

e aggiorna il CurrentJDKcollegamento simbolico a cui puntare

/Library/Java/JavaVirtualMachines/YOUR_JDK_VERSION/Contents/

Per esempio

cd /System/Library/Frameworks/JavaVM.framework/Versions
sudo rm CurrentJDK
sudo ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/ CurrentJDK

Ora funzionerà immediatamente.


1
Il trucco del collegamento simbolico CurrentJDK non sembra funzionare più con Maven 3.3.1, ma modificando ~ / .mavenrc funziona.
Stefan L,

41

Puoi anche fare,

<properties>
      ...  

      <!-- maven-compiler-plugin , aka JAVA Compiler 1.7 -->
      <maven.compiler.target>1.7</maven.compiler.target>
      <maven.compiler.source>1.7</maven.compiler.source>

      ...  
</properties>

5
Non funziona se Maven è in esecuzione con Java 6. Si blocca e basta[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project {projectname}: Fatal error compiling: invalid target release: 1.7 -> [Help 1]
Gavin S. Yancey,

27

Puoi anche dire esplicitamente a maven per quale versione java compilare. Puoi provare ad aggiungere il maven-compiler-pluginal tuo pom.

<project>
  [...]
  <build>
    [...]
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
        </configuration>
      </plugin>
    </plugins>
    [...]
  </build>
  [...]
</project>

Se hai importato un progetto maven in un IDE, probabilmente c'è un'impostazione maven nel tuo IDE per il compilatore predefinito che sta usando il tuo corridore maven.


o grazie. ma non ho iniziato. Ho solo "mvn -v" ... il motivo è che non assegno JAVA_HOME
Ninja

Si noti che influisce solo sul codice che viene compilato. Ho riscontrato questo problema e sono venuto qui perché una libreria esterna che stavo usando è stata compilata per Java 7 e Maven stava cercando di eseguirlo con Java 6

Non funziona se Maven è in esecuzione con Java 6. Si blocca e basta[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project {projectname}: Fatal error compiling: invalid target release: 1.7 -> [Help 1]
Gavin S. Yancey,

Questo funzionerà nel caso in cui l'impostazione di Maven nell'IDE per il compilatore predefinito sia inferiore a 1,7, ma il jdk installato sia superiore a 1,7
John Doe,

9

Mi ha aiutato Aggiungilo nel tuo pom.xml.

Per impostazione predefinita, il plug-in del compilatore di Maven utilizza Java 1.5 o 1.6, devi ridefinirlo nel tuo pom.xml.

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

4

Per utenti Eclipse. Se si dispone di una configurazione di esecuzione che pulisce il pacchetto, ad esempio.

Nel pannello Esegui configurazione è presente una scheda JRE in cui è possibile specificare con quale runtime deve essere eseguito. Nota che questa configurazione ha la precedenza su tutto ciò che è nel pom.xml.



2

Si prega di verificare la compatibilità. Ho lottato con mvn 3.2.1e jdk 1.6.0_37per molte ore. Tutte le variabili sono state impostate ma non funzionavano. Alla fine ho aggiornato jdk to 1.8.0_60e ha mvn 3.3.3funzionato. Variabili d'ambiente come segue:

JAVA_HOME=C:\ProgramFiles\Java\jdk1.8.0_60 
MVN_HOME=C:\ProgramFiles\apache-maven\apache-maven-3.3.3 
M2=%MVN_HOME%\bin extend system level Path- ;%M2%;%JAVA_HOME%\bin;

1

La soluzione di @MasterGaurav funziona perfettamente,

Normalmente inserisco l'interruttore java in una funzione zsh:

alias java_ls='/usr/libexec/java_home -V 2>&1 | grep -E "\d.\d.\d[,_]" | cut -d , -f 1 | colrm 1 4 | grep -v Home'

function java_use() {
    export JAVA_HOME=$(/usr/libexec/java_home -v $1)
    echo export "JAVA_HOME=$(/usr/libexec/java_home -v $1)" > ~/.mavenrc
    export PATH=$JAVA_HOME/bin:$PATH
    java -version
}

Quindi puoi eseguirne java_lsdue e ottenere tutto il jvm disponibile sul tuo computer, eseguire java_use 1.7per utilizzare la versione 1.7 sia per Java che per Maven.

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.