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.


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.


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


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


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


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.


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

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


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>

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

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.


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.


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.


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>

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.


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>

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.


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.


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.