Nicht genau.
JEP 247: Kompilieren für ältere Plattformversionen definiert diese neue Befehlszeilenoption--release
:
Wir haben eine neue Befehlszeilenoption definiert --release
, die den Compiler automatisch so konfiguriert, dass Klassendateien erstellt werden, die mit einer Implementierung der angegebenen Plattformversion verknüpft werden. Für die Plattformen in vordefiniert javac
, --release N
entspricht-source N -target N -bootclasspath <bootclasspath-from-N>
. (Hervorhebung von mir)
Also nein, es ist nicht gleichbedeutend mit -source N -target N
. Der Grund für diesen Zusatz ist im Abschnitt "Motivation" angegeben:
javac
bietet zwei Befehlszeilenoptionen -source
und -target
, mit denen die vom Compiler akzeptierte Version der Java-Sprache und die Version der von ihm erstellten Klassendateien ausgewählt werden können. Standardmäßig wird jedoch mit javac
der neuesten Version der Plattform-APIs kompiliert. Das kompilierte Programm kann daher versehentlich APIs verwenden, die nur in der aktuellen Version der Plattform verfügbar sind. Solche Programme können auf ältere Versionen der Plattform nicht ausgeführt, unabhängig von den Werten auf den übergebenen -source
und -target
. Optionen. Dies ist ein langfristiger Problemfaktor für die Benutzerfreundlichkeit, da Benutzer erwarten, dass sie durch Verwendung dieser Optionen Klassendateien erhalten, die auf der angegebenen Plattformversion ausgeführt werden können.
Kurz gesagt, die Angabe der Quell- und Zieloptionen reicht für die Kreuzkompilierung nicht aus. Da javac
standardmäßig Kompilierungen mit den neuesten Plattform-APIs durchgeführt werden, kann nicht garantiert werden, dass sie auf älteren Versionen ausgeführt werden. Sie müssen auch die -bootclasspath
Option angeben, die der älteren Version entspricht, um die Kompilierung korrekt durchzuführen. Dies würde die richtige API-Version enthalten, mit der kompiliert werden kann, und die Ausführung auf einer älteren Version ermöglichen. Da es sehr oft vergessen wurde, wurde beschlossen, eine Befehlszeilenoption hinzuzufügen, die alle notwendigen Schritte zum korrekten Cross-Kompilieren ausführte.
Lesen Sie weiter in der Mailingliste und in Oracle Docs . Der ursprüngliche Fehler wurde hier abgelegt . Beachten Sie, dass JDK-Builds seit der Integration dieser Option mit Beschreibungen der Plattform-APIs älterer Versionen gebündelt sind, die im Abschnitt "Risiken und Annahmen" aufgeführt sind. Das bedeutet, dass Sie die ältere Version nicht auf Ihrem Computer installiert haben müssen, damit die Cross-Kompilierung funktioniert.