Ich kann Maven anscheinend nicht dazu bringen, Java 1.8 zu verwenden. Wenn Sie 1.8 als Ziel verwenden, wird der folgende Fehler angezeigt:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile
(default-compile) on project csaro: Fatal error compiling: invalid target
release: 1.8 -> [Help 1]
Die Ursache des Fehlers liegt auf der Hand: Maven verwendet nicht die richtige Version von Java:
$ mvn -version
Apache Maven 3.2.2 (45f7c06d68e745d05611f7fd14efb6594181933e; 2014-06-17T07:51:42-06:00)
Maven home: /usr/local/Cellar/maven/3.2.2/libexec
Java version: 1.7.0_51, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.9.2", arch: "x86_64", family: "mac"
Die installierte Version von Java sollte jedoch 1.8 sein:
$ java -version
java version "1.8.0_20-ea"
Java(TM) SE Runtime Environment (build 1.8.0_20-ea-b22)
Java HotSpot(TM) 64-Bit Server VM (build 25.20-b21, mixed mode)
Und JAVA_HOME ist gesetzt:
$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home
Ich habe auch den Befehl hier ausprobiert (der erstellt mavenrc
). Ich habe mehrmals versucht, den Computer neu zu starten, und habe überprüft, ob die env var richtig eingestellt ist (sie ist in eingestellt .bash_profile
).
Maven wurde mit Homebrew installiert.
Java 1.8 funktioniert in Eclipse (das m2e verwendet) einwandfrei. Ich kann Maven einfach nicht dazu bringen, an der Kommandozeile zu arbeiten.
ls -la /Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home/bin/javac
?Antworten:
Für mich war das Problem, dass bei der Installation von
jdk-8u25-macosx-x64.dmg
der Installation der/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
Verzeichnislink zum neuen 1.8 JDK nicht aktualisiert wurde . Dies war möglicherweise nicht das Problem der ursprünglichen Frage, aber es war die Lösung für mich, als ich auf dieselbe Fehlermeldung stieß.Ich weiß nicht, warum das Installationsprogramm es nicht verknüpft. Um die Sache noch verwirrender zu machen, ist der Pfad unterschiedlich, je nachdem, ob Sie es von Oracle oder Apple installiert haben. Siehe Mac OS X 10.6.7 Java Path Current JDK verwirrend
Ich habe Folgendes getan, um meine Umgebung zu reparieren
cd /System/Library/Frameworks/JavaVM.framework/Versions sudo rm CurrentJDK sudo ln -s /Library/Java/JavaVirtualMachines/<installed_jdk_version>.jdk/Contents CurrentJDK
quelle
rm: CurrentJDK: Operation not permitted
https://www.quora.com/How-do-I-turn-off-the-rootless-in-OS-X-El-Capitan-10-11
Es stellt sich heraus, dass ich eine vergessene
~/.mavenrc
Datei hatte, die den Wert von festgelegt hatteJAVA_HOME
.Überprüfen Sie für zukünftige Leser die folgenden Positionen auf Orte, die möglicherweise überschrieben werden
JAVA_HOME
(in aufsteigender Rangfolge):~/.bash_profile
~/.bash_login
~/.bashrc
~/.profile
/etc/mavenrc
~/.mavenrc
quelle
JAVA_HOME
ist, nicht finden (falsch) - ich habe die von Ihnen aufgelisteten und viele weitere ausprobiert (/ etc / environment, / etc / profile, /etc/profile.d/*, ...). Am Ende habe ich mich fürunset JAVA_HOME
mein entschieden~/.bashrc
- das ist derzeit wahrscheinlich die einzige Möglichkeit, es automatisch mit Ubuntus zu machenupdate-alternatives
(da die meisten Programme versuchen, das richtige JAVA_HOME selbst herauszufinden, wenn es nicht eingestellt ist und eines der ersten Sie versuchen zu sehen, wohin die ausführbare Java-Datei zeigt.Die Lösung, die für mich funktioniert hat:
In Eclipse hatte ich in meinem Maven-Build eine falsche Ausführungskonfiguration. Gehe zu
und setzen Sie die Laufzeit auf Java 8.
quelle
Auf meinem CentOS 6.5-System ist das gleiche Problem aufgetreten.
java -version
gab eine Java 8-Version zurück, gab jedochjavac -version
eine Java 7-Version zurück.Ich musste die folgenden Befehle ausführen, damit alle Arten von Java-bezogenen Symlinks auf meine JDK 8-Installation verweisen:
sudo alternatives --config java sudo alternatives --config javac sudo alternatives --config jre_openjdk sudo alternatives --config java_sdk_openjdk
quelle
update-alternatives
ist relevant für Debian und Ubuntu, währendalternatives
es für CentOS / RedHat relevant ist.Ihr
JAVA_HOME
wird von woanders überschrieben. Versuchen Sie,mvn
direkt vor dem Java-Aufruf zu wiederholen .quelle
~/.mavenrc
JAVA_HOME außer Kraft gesetzt wurde, also +1./usr/libexex/java_home -v 1.8
) ist die beste Optionexport JAVA_HOME=$(/usr/libexec/java_home -v1.8)
Beachten Sie, dass Sie mit Java 11 auch den Fehler "Ungültige Zielversion" erhalten können
wenn Sie
1.11
statt nur11
im POM einstellen .Falsch:
<java.version>1.11</java.version>
Richtig:
<java.version>11</java.version>
quelle
Ich hatte das gleiche Problem, brauchte 2 Schritte, um es richtig zu machen:
JAVA_HOME
, dass der Wert korrekt auf JDK zeigt.Für mich war 1 Schritt richtig, der 2. Schritt hatte ein Problem. Zeigen Sie in Eclipse »Projekteigenschaften» Erstellungspfad »Installierte JRE» auf JDK.
quelle
Sie verwenden eine frühe Zugriffsversion von 1.8. Nachdem dies freigegeben wurde, sollten Sie die freigegebene Version installieren.
Überprüfen Sie Ihre Maven-Installation, um festzustellen, ob Ihnen eine Konfiguration zugeordnet ist, die ein bestimmtes JDK angibt. Gelegentlich gibt es Wrapper-Skripte, die JAVA_HOME vor dem Start des Maven zurücksetzen, oder die ausführbare Datei des Maven wird in einem Wrapper gestartet, der auf eine Konfigurationsdatei verweist, die Sie an eine bestimmte JVM binden könnte.
quelle
JAVA_HOME
(was andere Beiträge zu implizieren scheinen, ist alles, was benötigt wird). Abgesehen davon, ist 1.8.0_05 neuer als 1.8.0_20-ea?which java
und dann einenls -l
der zurückgegebenen Werte (da er Sie unabhängig von der Umleitungsvariablen umleitenJAVA_HOME
und diese auch überprüfenPATH
kann, da diese möglicherweise überschriebenjava
wird, bevor Sie zu den zu überprüfenden Elementen gelangen.Wenn Sie Maven auf einem Server für kontinuierliche Integration verwenden, überprüfen Sie unbedingt die Einstellungen, da dies das von Maven verwendete JDK überschreiben kann. Für Jenkins musste ich das neue 1.8 JDK in den allgemeinen Einstellungen hinzufügen und mein Projekt für die Verwendung konfigurieren.
quelle