Warum Maven JDK 1.6 verwendet, aber meine Java-Version ist 1.7

159

Ich bin neu in Maven und auch in MacOS.

Ich habe Setup Maven in meinem Terminal, und wenn ich die Versionseinstellungen (mit mvn -v) erhalte, scheint es, dass JDK 1.6 verwendet wird, während ich JDK 1.7 installiert habe. Ist irgendwas falsch?

Die Befehle, die ich eingebe, sind folgende:

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"
Ninja
quelle
2
Können Sie Ihre Variablen PATH und JAVA_HOME veröffentlichen?
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 ist das, was Sie wollen, Sir?
Ninja
3
Ich bin weiblich (es ist also falsch, mich als "Sir" zu bezeichnen) und ja. Bitte versuchen Sie Ihr JAVA_HOME einzustellen. Ihr Problem scheint diesem Problem ähnlich zu sein: stackoverflow.com/questions/13752519/…
Jeanne Boyarsky
2
@ JeanneBoyarsky Verzeihen Sie meine Unhöflichkeit. Die URL, die Sie angegeben haben, ist das Problem, das ich treffe. Vielen Dank ~
Ninja

Antworten:

227

Fügen Sie Folgendes hinzu ~/.mavenrc:

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

Zweite Lösung:

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

Gaurav Vaish
quelle
Ja, Ihre Antwort ist richtig. Das JAVAHOME ist erforderlich. Ich bearbeite stattdessen das Profil / etc /
Ninja
8
Durch Hinzufügen zu ~ / .mavenrc wird sichergestellt, dass andere Apps nicht betroffen sind. Nur mvn greift diese Version von JDK auf. :)
Gaurav Vaish
43
export JAVA_HOME = $ (/ usr / libexec / java_home -v 1.7)
jla
1
Die .mavenrc-Lösung hat bei mir perfekt funktioniert. Außerdem wurde mir klar, dass ich nur JDK 1.8 installiert hatte und nicht JRE 1.8. Danke Gaurav!
Timothy Clifford
2
Wenn Sie jenv auf einem Mac verwenden, kann dies sein: export JAVA_HOME="$HOME/.jenv/versions/`jenv version-name`"für ~/.mavenrcDatei.
Eddy
46

Geraten in

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

und aktualisieren Sie den CurrentJDKsymbolischen Link, auf den verwiesen wird

/Library/Java/JavaVirtualMachines/YOUR_JDK_VERSION/Contents/

Z.B

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

Jetzt soll es sofort funktionieren.

Oskar
quelle
1
Der CurrentJDK-Symlink-Trick scheint mit maven 3.3.1 nicht mehr zu funktionieren, aber das Ändern von ~ / .mavenrc funktioniert.
Stefan L
41

Sie können auch tun,

<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>
DEREK LEE
quelle
5
Das funktioniert nicht, wenn Maven mit Java 6 ausgeführt wird. Es stürzt nur mit[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 am
27

Sie können maven auch explizit mitteilen, für welche Java-Version kompiliert werden soll. Sie können versuchen, das maven-compiler-pluginzu Ihrem Pom hinzuzufügen .

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

Wenn Sie ein Maven-Projekt in eine IDE importiert haben, enthält Ihre IDE wahrscheinlich eine Maven-Einstellung für den Standard-Compiler, den Ihr Maven-Runner verwendet.

redFIVE
quelle
o , danke. aber ich habe nicht angefangen. Ich habe nur 'mvn -v' ... der Grund ist, dass ich JAVA_HOME
Ninja
Beachten Sie, dass dies nur Ihren kompilierten Code betrifft. Ich bin auf dieses Problem
Das funktioniert nicht, wenn Maven mit Java 6 ausgeführt wird. Es stürzt nur mit[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 am
Dies funktioniert, wenn die Maven-Einstellung in Ihrer IDE für den Standard-Compiler niedriger als 1,7 ist, das installierte JDK jedoch höher als 1,7 ist
John Doe
9

Es hat mir geholfen. Fügen Sie es einfach in Ihre pom.xml ein.

Standardmäßig verwendet das Maven Compiler Plugin Java 1.5 oder 1.6. Sie müssen es in Ihrer pom.xml neu definieren.

<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>
Sergey Luchko
quelle
4

Für Eclipse-Benutzer. Wenn Sie eine Ausführungskonfiguration haben, die beispielsweise ein sauberes Paket ausführt.

Im Bereich "Konfiguration ausführen" befindet sich eine Registerkarte "JRE", auf der Sie angeben können, für welche Laufzeit sie ausgeführt werden soll. Beachten Sie, dass diese Konfiguration alles überschreibt, was in der Datei pom.xml enthalten ist.

Yonatan Abrego
quelle
2

Bitte überprüfen Sie die Kompatibilität. Ich kämpfte mit mvn 3.2.1und jdk 1.6.0_37für viele Stunden. Alle Variablen wurden gesetzt, funktionierten aber nicht. Schließlich Ich habe ein Upgrade jdk to 1.8.0_60und mvn 3.3.3und das funktioniert. Umgebungsvariablen wie folgt:

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;
Vikas Singh
quelle
1

Die Lösung von @MasterGaurav funktioniert einwandfrei.

Normalerweise setze ich das Java-Switch-Ding in eine zsh-Funktion:

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
}

Dann können Sie java_lszwei ausführen, um alle verfügbaren JVM auf Ihrem Computer java_use 1.7abzurufen und die Version 1.7 sowohl für Java als auch für Maven zu verwenden.

Wei Qiu
quelle