Kompilieren von Java 7-Code über Maven

155

Meine POM-Dateilisten

<project>
  <build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.0</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.12.4</version>
            </plugin>
        </plugins>
    </pluginManagement>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
    </plugins>
  ...

Aber auf mvn clean installbekomme ich

[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] Failure executing javac, but could not parse the error:
javac: invalid target release: 1.7
Usage: javac <options> <source files>

/usr/bin/java -versionist ( which javaPunkte hier)

java version "1.7.0_10"
Java(TM) SE Runtime Environment (build 1.7.0_10-b18)
Java HotSpot(TM) 64-Bit Server VM (build 23.6-b04, mixed mode)

javac verweist auch auf die richtige Java-Version

/usr/bin/javac -> /Library/Java/JavaVirtualMachines/jdk1.7.0_10.jdk/Contents/Home/bin/javac

Auf diesem Computer verwende ich zsh( echo $0Rückgabe -zsh)

In meinem habe .zshrcich definiert:

 33 # HOME
 34 JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_10.jdk/Contents/Home
 35 SCALA_HOME=/Library/Scala/current
 36 FORGE_HOME=~/tools/forge/
 37 
 38 # PATH
 39 PATH="/Library/Frameworks/Python.framework/Versions/3.2/bin:${PATH}"
 40 PATH=${PATH}:${JAVA_HOME}/bin
 41 PATH=${PATH}:/bin/
 42 PATH=${PATH}:/sbin/
 43 PATH=${PATH}:/usr/bin/
 44 PATH=${PATH}:/usr/sbin/
 45 PATH=${PATH}:/opt/local/bin/
 46 PATH=${PATH}:/opt/local/sbin/
 47 PATH=${PATH}:/usr/local/git/bin
 48 PATH=${PATH}:/usr/local/git/sbin
 49 PATH=${PATH}:/Applications/Xcode.app/Contents/Developer/usr/bin
 50 PATH=${PATH}:${SCALA_HOME}/bin
 51 PATH=${PATH}:${FORGE_HOME}/bin
 52 
 53 export PATH

Wenn ich laufe, mvn clean install --debugsehe ich, dass ich tatsächlich Java 6 verwende

  1 Apache Maven 3.0.3 (r1075438; 2011-02-28 11:31:09-0600)
  2 Maven home: /usr/share/maven
  3 Java version: 1.6.0_35, vendor: Apple Inc.
  4 Java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

Wo könnte es definiert werden? Ich habe Quelle (d) meine .zshrc mehrmals.

James Raitsev
quelle
2
Ihr PATH hat nicht den /usr/binersten Platz in der Liste der Verzeichnisse. Versuchen Sie es javac -versionohne Angabe eines Verzeichnisses.
Peter Lawrey
@ PeterLawrey, ich bekommejavac 1.7.0_10
James Raitsev
2
Was echo $JAVA_HOMEsagt dir das?
Andrew Logvinov
2
Was ist mit Ihrer JAVA_HOME-Variablen? mvn verwendet JAVA_HOME. Bauen Sie auch über die Befehlszeile oder innerhalb der IDE?
Lucas
8
Wenn Sie Maven mit ausführen --debug, sollte es Ihnen die genaue Befehlszeile mitteilen, die zum Ausführen verwendet wird javac(zusammen mit Tonnen anderer Dinge). Was sagt es?
Emil Sit

Antworten:

153

Überprüf den mvn Skript in Ihrer Maven-Installation, um festzustellen, wie der Befehl erstellt wird. Vielleicht haben Sie oder jemand anderes dort ein fest codiert JAVA_HOMEund es vergessen.

Ryan Stewart
quelle
8
Sie, Sir, sind der Gewinner. In der Tat hat jemand JAVA_HOME im Skript fest codiert! DANKE
James Raitsev
21
Heh, nicht, dass ich mir das jemals zuvor angetan hätte oder so ... :)
Ryan Stewart
4
Das mvnSkript war nicht mit meiner OSX-Installation von Oracle JDK 7 kompatibel, und ich habe nichts Besonderes getan, um es einzurichten (das Skript sucht nach einem Ordner, Library/Java/JavaVirtualMachines/CurrentJDKder für mich nicht vorhanden war (was vorhanden war, ist jdk1.7.0_25.jdkstatt CurrentJDK). Nicht eine elegante Lösung, aber ich habe gerade den Export hartcodiert und jetzt funktioniert es (PS: Maven unter OSX ist bei /usr/share/maven/bin/mvn)
Raekye
6
OSX 1.9.2 Mavericks, mit Maven über Homebrew installiert, befand sich das MVN-Skript bei/usr/local/bin/mvn
StackExchange What The Heck
1
Ich hatte ein JAVA_HOME-Set und dies gab den Hinweis. VIELEN DANK!! : D
Alfonso Nishikawa
109

Versuchen Sie es mit einer neueren Version des Maven Compiler Plugins:

    <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.2</version>
        <configuration>
            <source>1.7</source>
            <target>1.7</target>
        </configuration>
    </plugin>

Außerdem ist es global besser, die Quelldatei-Codierung in Maven anzugeben:

<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

BEARBEITEN : Da diese Antwort immer noch Beachtung findet, möchte ich nur darauf hinweisen, dass die neuesten Werte (Stand der letzten Bearbeitung) 3,2 für das Maven-Compiler-Plugin und 1,8 für Java sind, da Fragen zum Kompilieren von Java 8-Code über Maven gebunden sind erscheint bald :-)

Radai
quelle
Das Hinzufügen von "<version> 3.0 </ version>" hat das Problem behoben.
Sriram
@ Radai, es ist jetzt 3.2, aber dumm, weiter zu aktualisieren, da es nie aufhören wird
Lucas
@Lucas - will einfach nicht dafür verantwortlich sein, dass Leute an veralteten Versionen festhalten, ist alles. konnte nicht mit mir leben :-)
Radai
Warum hat diese Antwort fast hundert positive Stimmen, wenn sie nicht die richtige Lösung für die gestellte Frage ist? Ich bin verloren ...
Zero3
48

Ich hatte das gleiche Problem und um dieses zu lösen, folge ich diesem Blog-Artikel: http://www.mkyong.com/java/how-to-set-java_home-environment-variable-on-mac-os-x/

$ vim .bash_profile 

export JAVA_HOME=$(/usr/libexec/java_home)

$ source .bash_profile

$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home

spezielle tks an @mkyong

EDIT: Jetzt benutze ich: jEnv + sdkman

eliocapelati
quelle
3
Das hat bei mir funktioniert. Ich benutze einen Mac mit Maven von Macports und dem Sun JDK. Anscheinend war diese Kombination schwierig.
Quantum7
1
Gute Arbeit. Vielen Dank für alle Befehle! Funktioniert jetzt bei Maveriks
Maksim
1
Dies ist die einfachste und eleganteste Lösung. Danke dir!
BK-
26

Bitte überprüfen Sie Ihre pom.xml auf die folgenden Tags

<properties>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
</properties>

Es sollte auf die erforderliche JDK-Version verweisen

user4010880
quelle
19

Sie müssen die Maven-Version überprüfen:

mvn -version

Sie finden die Java-Version, die Maven zum Kompilieren verwendet. Möglicherweise müssen Sie JAVA_HOME bei Bedarf zurücksetzen.

Loi Cao
quelle
19

Ich hatte das gleiche Problem. Ich habe festgestellt, dass dies daran liegt, dass das Maven-Skript den unten stehenden Link CurrentJDK überprüft und ein 1.6 JDK findet. Selbst wenn Sie das neueste JDK installieren, wird dies nicht behoben. Während Sie JAVA_HOME einfach in Ihrem Skript $ HOME / .bash_profile festlegen konnten, habe ich mich dafür entschieden, den symbolischen Link wie folgt zu reparieren:

ls -l /System/Library/Frameworks/JavaVM.framework/Versions/
total 64
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.4 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.4.2 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.5 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.5.0 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.6 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.6.0 -> CurrentJDK
drwxr-xr-x  9 root  wheel  306 11 Nov 21:20 A
lrwxr-xr-x  1 root  wheel    1 30 Oct 16:18 Current -> A
lrwxr-xr-x  1 root  wheel   59 30 Oct 16:18 CurrentJDK -> /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents

Beachten Sie, dass CurrentJDK auf 1.6.0.jdk zeigt

Um dies zu beheben, habe ich die folgenden Befehle ausgeführt (Sie sollten Ihre installierte Version überprüfen und entsprechend anpassen).

sudo rm /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
sudo ln -s /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/ /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
Chris McCarthy
quelle
Wenn mvn clean install -debug Java 1.6 anzeigt, ist dies die richtige Antwort
cetnar
4

Diagnose:

Sie können sehen, welche Java-Version Maven verwendet, indem Sie "mvn --version" ausführen.

Lösung für Debian:

Das mvn-Skript legt die Variable JAVA_HOME env intern fest, indem nach javac (welches javac) gesucht wird. Wenn Sie mehrere Java-Versionen gleichzeitig installiert haben, z. B. JDK 6 und JDK 7, und das Debian Alternatives-System verwenden, um zwischen ihnen zu wählen, obwohl mvn die Alternative für "java" in JDK 7 geändert hat, verwendet mvn weiterhin JDK 6. Sie muss auch die Alternative für "javac" ändern. Z.B:

# update-alternatives --set javac /usr/lib/jvm/java-7-openjdk-amd64/bin/javac

BEARBEITEN:

Eine noch bessere Lösung ist die Verwendung von Update-Java-Alternativen (z.

# update-java-alternatives -s java-1.7.0-openjdk-amd64

wie unter https://wiki.debian.org/JavaPackage beschrieben , da dadurch alle Alternativen zu verschiedenen Java-Tools geändert werden (es gibt ungefähr ein Dutzend).

user323094
quelle
Danke, genau das, wonach ich gesucht habe
evandongen
Danke, ich war verwirrt, nachdem ich die Java-Version eingestellt hatte mit: update-alternatives --config javac
Leonard Saers
2

Könnten Sie ein neueres Plugin ausprobieren? auf der Maven-Site:

<version>3.0</version>

Ich habe auch folgendes gesehen:

<compilerVersion>1.7</compilerVersion>
Joop Eggen
quelle
Funktioniert nicht. [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.0:compile (default-compile) on project divs: Fatal error compiling: invalid target release: 1.7 -
James Raitsev
Ich habe 2.3.2 bereits erfolgreich zum Kompilieren von 1.7 verwendet ... Aber es ist immer gut, wenn möglich die neueste zu verwenden.
Lucas
Weiter gesucht. Überprüfen Sie die Verwaltung Ihres Abhängigkeits-Plugins, wenn Sie dies verwenden.
Joop Eggen
<PluginDependency> hinzugefügt, das gleiche Problem
James Raitsev
Wenn es sich um ein Modulprojekt handelt, ist das übergeordnete Projekt möglicherweise einen Blick wert. Dies kann hier nicht der Fall sein. Läuft Maven mit Java 1.7?
Joop Eggen
2

Versuchen Sie, die Java-Compilereinstellungen in den Eigenschaften von Eclipse- zu ändern.

Springen Sie zu: Einstellungen-> Java-> Compiler-> Compiler-Konformitätsstufe-> 1.7 Übernehmen OK

Starten Sie die IDE neu.

Bestätigen Sie die Compiler-Einstellung für das Projekt. Springen Sie zu: Projekteigenschaften-> Java-Compiler-> Deaktivieren Sie (Konformität aus der Ausführungsumgebung 'JavaSE-1.6' im Java-Erstellungspfad verwenden.) Und wählen Sie 1.7 aus der Dropdown-Liste aus. (Ignorieren, wenn bereits 1.7)

Starten Sie die IDE neu.

Wenn das Problem weiterhin besteht, führen Sie einzelne Testfälle mit dem Befehl im Terminal aus.

mvn -Dtest=<test class name> test
Mithun Khatri
quelle
2

Ich bin mir nicht sicher, welches Betriebssystem hier verwendet wird, aber Sie können eine Menge Java-Versionen eliminieren, die un debian / ubuntu mit Update-Java-Alternativen futzing, um das Standard-JVM-System weit festzulegen.

#> update-java-alternatives -l
java-1.6.0-openjdk-amd64 1061 /usr/lib/jvm/java-1.6.0-openjdk-amd64
java-1.7.0-openjdk-amd64 1071 /usr/lib/jvm/java-1.7.0-openjdk-amd64
java-6-sun 63 /usr/lib/jvm/java-6-sun
java-7-oracle 1073 /usr/lib/jvm/java-7-oracle

Verwenden Sie zum Festlegen eines neuen:

#> update-java-alternatives -s java-7-oracle

Für die meisten Apps muss JAVA_HOME nicht festgelegt werden.

Bruce Edge
quelle
2

Klicken Sie mit der rechten Maustaste auf Ihr Projekt in Eclipse und öffnen Sie "Konfigurationen ausführen". Überprüfen Sie dort die jre-Version. Manchmal ändert sich dies in Eclipse standardmäßig nicht, nachdem sogar die Version im Buildpath geändert wurde.

Ravinder Reddy
quelle
2

Bei einer bestimmten Kompilierung, für die eine (nicht standardmäßige /etc/alternatives/java) JVM erforderlich ist , sollten Sie dem mvnBefehl Folgendes voranstellen JAVA_HOME:

JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/ mvn package

Hier nehmen wir an, dass der Standard Java 8 ist, während wir für das jeweilige Projekt Java 7 benötigen.

Ulme
quelle
Dies funktionierte am besten für mich, da dann keine Änderungen an der Quelle des von GIT (oder SCM) heruntergeladenen
Projekts6 vorgenommen werden müssen
Diese Antwort verdient mehr positive Stimmen. Es half mir, einen Code zu kompilieren, der Java 7 auf meinem Computer erfordert, auf dem standardmäßig Java 8 war - ohne Java7 und Java 8 installieren und neu installieren zu müssen.
R11G
1

{JAVA_1_4_HOME} / bin / javacy Sie können auch versuchen ...

<plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
                <source>1.7</source>
                <target>1.7</target>
                <showDeprecation>true</showDeprecation>
                <showWarnings>true</showWarnings>
                <executable>{JAVA_HOME_1_7}/bin/javac</executable>
                <fork>true</fork>
        </configuration>
    </plugin>
baybora.oren
quelle
4
Sie sollten den Pfad für keinen Code fest codieren, der jemals freigegeben wird.
Jan Segre
@ Jan Segre, ok, ich ändere es :)
baybora.oren
0

Ok, ich habe dieses Problem auch alleine gelöst. Es ist wichtiger, dass Sie JAVA_HOME haben. Wenn Sie im Vergleich zu den Quell- / Zieleigenschaften des Maven-Plugins keine niedrigere oder keine Version haben, wird dieser Fehler angezeigt.

Stellen Sie sicher, dass Ihr JAVA_HOME eine gute Version enthält und in Ihrem PATH enthalten ist.

Silviu Burcea
quelle
0

Möglicherweise geben Sie eine falsche Java-Version an. Java-Version (in Ihrem Terminal), um die von Ihnen verwendete Java-Version zu überprüfen. Die neueste Version des Maven-Compilers finden Sie im Maven-Compile-Plugin. Wenn Sie Java 6 verwenden und die neueste Version des Maven-Compiler-Plugins 3.1 ist, wird Ihr Plugin möglicherweise so angezeigt

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>
Henry
quelle
0

Keine der vorherigen Antworten hat meinen Anwendungsfall vollständig gelöst.

Muss das zu entfernende Verzeichnis entfernen. Reinigen. Und dann neu installieren. Sieht aus wie ein Problem mit stillen Berechtigungen.

Piperchester
quelle
0

Ich hatte dieses Problem in IntelliJ IDEA 14, bis ich zum Menü Datei -> Projektstruktur ging und das Projekt-SDK auf 1.7 und die Projektsprachenstufe auf 7 änderte.

Jon Onstott
quelle
0

Ich hatte dieses Problem bei der Arbeit mit Eclipse. Ich musste den Erstellungspfad des Projekts so ändern, dass er sich auf jre 7 bezieht

osama yaccoub
quelle