So verwenden Sie Quell- und Zielparameter im Java-Compiler

Wenn Sie ein Java-Programmierer sind, kommt Ihnen eine der häufigsten Fragen in den Sinn Wie kompiliere ich, um die Kompatibilität mit älteren Java-Versionen zu gewährleisten?. Wenn Sie Ihr Java-Programm mit einer älteren Version der Java-Laufzeitumgebung ausführen, erhalten Sie möglicherweise die folgende Java-Ausnahme, wenn Sie nicht mit der richtigen Version der Java-Sprache kompiliert haben:

Exception in thread "main" java.lang.UnsupportedClassVersionError: Bad version number in .class file

In einem meiner vorherigen Beispiele habe ich erklärt, wie man die Versionsnummer von Java anhand der Klassendatei überprüft. In diesem Tutorial werde ich die beiden Parameter erklären: target Und source die für Cross-Compilation- und Laufzeitanforderungen Ihrer Java-Anwendung verwendet werden.

Wenn Sie sicherstellen möchten, dass die Anwendung die minimale Laufzeitumgebung unterstützt, müssen Sie vollständig verstehen, wie die Quell- und Zielparameter für Javac verwendet werden. Der Java-Compiler javac bietet die Möglichkeit, mithilfe der Befehlszeilenargumente die für Ihre Anwendung unterstützte Ziellaufzeitumgebung festzulegen target beim Kompilieren des Quellcodes.

Javac-Quell- und Zielparameter

Beispiel für Javac-Quelle und -Ziel

Quellparameter teilt dem Compiler mit, dass der Quellcode mit der spezifischen Version kompiliert wird. In der offiziellen Dokumentation heißt es: source Der Parameter stellt die Quellkompatibilität mit der angegebenen Version bereit. Wenn Sie den Quellcode mit Java 1.6 kompilieren, der Code jedoch einige spezifische Funktionen in Java 7 aufweist, schlägt die Kompilierung fehl. In diesem Fall müssen Sie das einstellen source Parameter als Java 1.7.

Die folgenden Parameterwerte werden für die Freigabe akzeptiert:

  • 1.3 – Der Compiler unterstützt keine Assertionen, Generika oder andere Sprachfunktionen, die nach JDK 1.3 eingeführt wurden.
  • 1.4 – Der Compiler akzeptiert Code mit Behauptungen, die in JDK 1.4 eingeführt wurden.
  • 1.5 – Der Compiler akzeptiert Code, der Generika und andere in JDK 5 eingeführte Sprachfunktionen enthält.
  • 5 – Synonym für 1,5.
  • 1.6 – Dies ist der Standardwert, wenn Sie mit JDK 6 kompilieren. In Java SE 6 wurden keine Sprachänderungen eingeführt. Codierungsfehler in Quelldateien werden jedoch jetzt als Fehler und nicht wie zuvor als Warnungen gemeldet.
  • 6 – Synonym für 1.6.
  • 1,7 – Dies ist der Standardwert. Der Compiler akzeptiert Code mit in Java SE 7 eingeführten Funktionen.
  • 7 – Synonym für 1.7.

Zielparameter teilt dem Compiler mit, welche Ziel-JVM mindestens die Klassendateien ausführen kann. Wenn Sie das bestehen target Parameter als 1.5, dann sind die Klassendateien kompatibel, um JVM-Version 1.5 und höher auszuführen. Es kann jedoch nicht unter 1,5 JVM ausgeführt werden.

Der Standardwert für -target hängt vom Wert von -source ab:

  • Wenn -source nicht angegeben ist, beträgt der Wert von -target 1,6
  • Wenn -source 1,2 ist, ist der Wert von -target 1,4
  • Wenn -source 1,3 ist, ist der Wert von -target 1,4
  • Für alle anderen Werte von -source ist der Wert von -target der Wert von -source.

Schauen wir uns den folgenden Beispielbefehl an:

% javac -source 1.6 -target 1.5

Der obige Code vermittelt die Botschaft, dass die Codebasis mit der Java 1.6-Version kompiliert wird, die angestrebte Mindestumgebungsunterstützung jedoch Java 1.5 ist. Mit anderen Worten: Konvertierte Klassendateien sind mit 1.6 JVM kompatibel.

Ameise – Quelle und Ziel

Wie können die Quell- und Zielparameter von Javac im Apache-Ant-Skript verwendet werden? Schauen wir uns den folgenden Codeausschnitt des Ant-Skripts an:

<target name="compile">
  <javac source="1.5" target="1.5" srcdir=.../>
</target>

Maven – Quelle und Ziel

Dieser Abschnitt enthält das Beispielcode-Snippet für die Verwendung der Quell- und Zielparameter von javac in der pom.xml-Datei des Maven.

    <project>
      [...]
      <build>
        [...]
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.5.1</version>
            <configuration>
              <source>1.5</source>
              <target>1.5</target>
            </configuration>
          </plugin>
        </plugins>
        [...]
      </build>
      [...]
    </project>

Entfernen der Unterstützung für die älteren Versionen

Es gibt ein JEP 182 Dabei geht es darum, die alte Version aus dem Support zu nehmen, um die Kosten für die Wartung mehrerer Versionen zu senken.

Oracle möchte die Wartungskosten senken javacdaher definiert der neue JEP 182 eine Richtlinie für die Pensionierung alter -source Und -target Optionen. Ab JDK 8 Verwendung einer Quelle oder eines Ziels von 1.5 oder früher ist veraltet und in JDK 9 wird eine Quelle oder ein Ziel von unterstützt 1.5 oder früher wird vollständig entfernt.

Ab JDK 9 und in Zukunft: javac wird eine „Eins + drei zurück“-Richtlinie der unterstützten Quell- und Zieloptionen verwenden. Im Rahmen dieser Richtlinie gilt: javac wird weiterhin in der Lage sein, Klassendateien aller früheren JDKs zu erkennen und zu verarbeiten, was auf Klassendateien der Version 45.3 zurückgeht, die von JDK 1.0.2 generiert wurden, das erstmals 1996 ausgeliefert wurde.

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen