Ich versuche ein Hudson-Plugin zu erstellen, das ich geändert habe, und es erfordert jdk1.6. Das ist in Ordnung, aber ich sehe nicht, wie ich Maven sagen kann, wo der andere JDK ist. Ich habe im Internet nur wenige Erwähnungen gefunden, aber sie scheinen nicht auf mich zuzutreffen. Einige schlagen vor, eine Konfiguration hinzuzufügen, .m2/settings.xml
aber ich habe keine settings.xml
. Außerdem möchte ich 1.6 nicht für alle Maven-Builds verwenden.
Ein Knick ist, dass ich mvn
in Cygwin benutze, wenn das überhaupt wichtig ist. Es scheint, dass ich in der Lage sein sollte, die Spezifikation in der Projekt-POM-Datei zu erstellen, aber der vorhandene POM ist ziemlich kahl.
Unterm Strich gibt es also eine Möglichkeit, ein JDK für einen einzelnen Aufruf von Maven anzugeben?
set JAVA_HOME="C:\Java\jdk7"
JAVA_HOME
Kann in dieser Datei für Maven (zumindest auf dem Mac) eingestellt werden:/private/etc/mavenrc
- Und das kann so etwas wie (beachten Sie die Backticks, nicht einfache Anführungszeichen!):export JAVA_HOME=`/usr/libexec/java_home -v 1.7.0_75`
export JAVA_HOME='D:/dev/java/jdk8/jre'
(arbeitet für mich)java -version
, wird immer noch die vorherige Version gedruckt.Scheint, dass Maven jetzt hier eine Lösung bietet: Kompilieren von Quellen mit einem anderen JDK
JAVA_HOME
Angenommen , Ihre Punkte beziehen sich auf JDK7 (das Maven-Prozesse ausführt).Ihr
pom.xml
könnte sein:Wenn Ihre Entwickler nur die folgenden Zeilen hinzufügen (und anpassen)
settings.xml
, ist Ihr POM plattformunabhängig:quelle
-Dmaven.compiler.fork=true
und-Dmaven.compiler.executable=/path/to/target/javac
in der Kommandozeile verwenden kann.compile: compile verfügt über eine Benutzereigenschaft , mit der Sie einen Pfad zum angeben können
javac
.Beachten Sie, dass diese Benutzer - Eigenschaft funktioniert nur , wenn
fork
ist ,true
das istfalse
standardmäßig aktiviert .Möglicherweise müssen Sie den Wert in doppelte Anführungszeichen setzen, wenn er Leerzeichen enthält.
Siehe auch Vorrang für benutzerdefinierte Maven-Eigenschaften .
quelle
JAVA_HOME
Variable überschreiben . Zum Beispiel (in Bash Shell):JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/ mvn -Dmaven.compiler.fork=true -Dmaven.compiler.executable=/usr/lib/jvm/java-8-openjdk-amd64/bin/javac spring-boot:run
Wie du gesagt hast "Plus, ich möchte 1.6 nicht für alle Maven-Builds verwenden." .... Also besser, ich werde sagen, ändere deine POM-Datei und gib an, welche JDK-Version verwendet werden soll.
Dadurch wird sichergestellt, dass Ihr spezielles Projekt diese Version von jdk verwendet.
quelle
Ich sage, Sie richten die
JAVA_HOME
Umgebungsvariable so ein, wie Pascal sagt: Wenn Sie in Cygwin bash verwenden, wie Ihre Shell sein sollte:Es schadet nie, auch prepend den Java -
bin
Verzeichnispfad zurPATH
Umgebungsvariable mit:Fügen Sie außerdem hinzu
maven-enforce-plugin
, um sicherzustellen, dass das richtige JDK verwendet wird. Dies ist eine gute Übung für Ihren Pom.Weitere Informationen finden Sie unter Maven Enforcer-Plugin - Verwendung .
quelle
Ich weiß, dass es ein alter Thread ist. Aber ich hatte einige Probleme mit etwas Ähnlichem in Maven für Java 8 Compiler-Quelle. Ich habe dies mit einer schnellen Lösung herausgefunden, die in diesem Artikel erwähnt wird. Ich dachte, ich kann es hier einfügen und vielleicht anderen helfen:
quelle
Maven verwendet die Variable $ JAVACMD als letzten Java-Befehl. Legen Sie fest, wo sich die ausführbare Java-Datei befindet, um Maven auf ein anderes JDK umzuschalten.
quelle
Mit Hudson können Sie auch mehrere Java-Laufzeiten definieren und Maven mit einer davon aufrufen. Schauen Sie sich die Konfigurationsseite genauer an.
quelle
Wenn Sie Java
brew
in installiert haben,Mac
finden Sie Ihr Java-Home-Verzeichnis wahrscheinlich hier:Der nächste Schritt wäre nun zu finden, auf welches
Java Home
Verzeichnis maven zeigt. Um es zu finden, geben Sie den folgenden Befehl ein:mvn -version
Die Felder, die uns hier interessieren, sind:
Java version
undruntime
.Maven zeigt derzeit auf
Java 13
. Außerdem können Sie den Java-Home-Pfad unter der Schlüssellaufzeit sehen:/usr/local/Cellar/openjdk/13.0.2+8_2/libexec/openjdk.jdk/Contents/Home
Um die Java-Version des Maven zu ändern, müssen Sie den
Java 8
Home-Pfad zurJAVA_HOME
env-Variablen hinzufügen .Dazu müssen wir den Befehl ausführen:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
im Terminal.Wenn wir nun die Maven-Version überprüfen, können wir sehen, dass sie jetzt auf Java 8 zeigt.
Das Problem dabei ist, wenn Sie die Maven-Version im neuen Terminal erneut überprüfen, werden Sie feststellen, dass sie auf Java 13 verweist. Um dies zu vermeiden, würde ich vorschlagen, die
JAVA_HOME
Variable in die~/.profile
Datei aufzunehmen.Auf diese Weise nimmt Ihr Terminal beim Laden standardmäßig den Wert an, den Sie in JAVA_HOME definiert haben. Dies ist die Zeile, die Sie in die
~/.profile
Datei einfügen müssen:export JAVA_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
Sie können ein neues Terminal öffnen und die Maven-Version (
mvn -version
) überprüfen. Sie werden feststellen, dass diesmal auf Java 8 verwiesen wird.quelle
Ich hatte ein Problem mit Maven in Eclipse unter Windows 7.
Obwohl ich beobachtet habe, dass mvn build von der Kommandozeile aus einwandfrei lief.
Eclipse erwog als Standard-JVM eine JRE-Installation anstelle von JDK, sodass die Kompilierung fehlschlug.
Ich habe der folgenden Zeile zu eclipse.ini hinzugefügt:
Auch wenn ich von Eclipse ausgehe, habe ich im Abschnitt "Ziele" folgende Liste verwendet:
Kompilierungsfehler wurde behoben.
quelle
Für Java 9:
quelle
Eine weitere Alternative zum Verwalten mehrerer JDK-Versionen ist jEnv
Nach der Installation können Sie die Java-Version einfach "lokal" ändern, dh für ein bestimmtes Projektverzeichnis, indem Sie:
Dadurch wird mvn diese Version auch lokal verwenden, wenn Sie das mvn-Plugin aktivieren:
quelle
Sie können das JDK für Maven auch in einer Datei in Ihrem Home-Verzeichnis festlegen
~/.mavenrc
:Diese Umgebungsvariable wird vom MVN-Skript überprüft und verwendet, wenn vorhanden:
https://github.com/CodeFX-org/mvn-java-9/tree/master/mavenrc
quelle