Kurze Frage: Wenn ich relativ "kleine" Java 7 Sprachfeatures verwende, die vorher in Java 6 nicht verfügbar waren, wie der try-muticatch Block ... bedeutet dies, dass mein Programm nicht auf Maschinen mit JRE 6 oder JRE läuft 5 nach der Kompilierung wie installiert installiert? Wenn das korrekt ist, gibt es eine schnelle Möglichkeit, eine ausführbare JRE6-JAR-Datei zu erstellen, ohne einen Java 7-Quellcode zu ändern (was übrigens das einzige Java 7-Feature ist, das try-multicatch-Block ist)?
Sie haben Recht. Multi-Catch ist ein Java 7-Sprachfeature und es gibt keine Möglichkeit, es zu Java 6 (oder früherem) JVM-kompatiblem Bytecode zu kompilieren.
Mit Hilfe eines Java 7-Compilers können Sie Java 6-kompatiblen Bytecode kompilieren:
javac -source 1.6 -target 1.6 MyJavaFile.java
Wenn Sie versuchen, ein Java 7-Sprachfeature zu kompilieren (zB Multi-Catch), erhalten Sie:
%Vor% (Mehr zu dem, was warning
bedeutet, siehe:
Ссылка - es ist nicht relevant für diese Diskussion)
Wenn Sie das -source
-Flag in 1.7
ändern, erhalten Sie:
Quell-Release 1.7 erfordert Ziel Release 1.7
Weil ... Sie Java 7-Quellen (z. B. Quellen mit Java 7-Funktionen) nicht mit Java 6-kompatiblen Bytecodes kompilieren können.
Wenn Sie es mit Java 7 kompilieren (ohne -source
oder -target
Flag), erhalten Sie Java 7 Bytecode, der nicht auf & lt; Java 7 JVM. Und wenn Sie dies versuchen, erhalten Sie eine Fehlermeldung, dass die Versionen nicht übereinstimmen:
roach $ / Library / Java / Startseite / bin / java net.mostlyharmless.multicatch.App
Ausnahme im Thread "main" java.lang.UnsupportedClassVersionError: net / mastersharmless / multicatch / App: Nicht unterstützte Major.Minor-Version 51.0
Sie können Quelle mit Java 7-Features nicht in Java 6 .class kompilieren, weil dies
ist %Vor% erzeugt source release 1.7 requires target release 1.7
Fehler. Dies liegt daran, dass einige der Features von 1.7 nur mit Java 7-Klassen funktionieren können. ZB try-with-resources
verwendet Throwable.addSuppressed
Methode nur verfügbar seit 1.7
Tags und Links java backwards-compatibility