it-swarm.com.de

Gradle, "sourceCompatibility" vs "targetCompatibility"?

Was ist die Beziehung/der Unterschied zwischen sourceCompatibility und targetCompatibility? Was passiert, wenn sie auf unterschiedliche Werte eingestellt sind?

Nach Gradle-Dokumentation :

sourceCompatibility ist "Kompatibilität der Java-Version, die beim Kompilieren von Java source) verwendet werden soll." targetCompatibility ist "Java-Version, für die Klassen generiert werden sollen."

Mein Verständnis ist, dass targetCompatibility Java) Bytecode generiert, der mit einer bestimmten Java-Version kompatibel ist. Ist dies eine Teilmenge der Funktionalität von sourceCompatibility?

108
Mike Rylander

diese Zuordnung erfolgt zu javac - siehe Abschnitt "Cross-Compilation" - source ist im Grunde die Ausgangssprachenebene und target die Ebene des generierten Bytecodes.

66
Matt

Seien Sie vorsichtig, wenn Sie diese verwenden; Wir wurden von Leuten gebissen, die Annahmen machten.

Nur weil Sie sourceCompability (oder targetCompatibility) von 1.5 verwenden, können Sie Ihren Code nicht immer mit JDK 1.6 kompilieren und erwarten, dass er unter JDK 1.5 funktioniert. Das Problem sind die verfügbaren Bibliotheken.

Wenn Ihr Code eine Methode aufruft, die nur in JDK 1.6 verfügbar ist, wird er dennoch mit den verschiedenen Kompatibilitätsoptionen für die Ziel-VM kompiliert. Wenn Sie es jedoch ausführen, schlägt dies fehl, da die betreffende Methode nicht vorhanden ist (Sie erhalten eine MethodNotFoundException oder eine ClassNotFoundException).

Aus diesem Grund vergleiche ich immer die Kompatibilitätseinstellung mit der tatsächlichen Java Version, unter der ich baue. Wenn sie nicht übereinstimmen, scheitere ich beim Erstellen.

49
user1644873

sourceCompatibility = gibt an, dass die Version der Java= - Programmiersprache zum Kompilieren von Java - Dateien verwendet wird. Beispiel: sourceCompatibility 1.6 = gibt die Version 1.6 von an Die Programmiersprache Java) wird zum Kompilieren von . Java -Dateien verwendet.

Standardmäßig sourceCompatibility = "Version der aktuell verwendeten JVM" und targetCompatibility = sourceCompatibility

targetCompatibility = Die Option stellt sicher, dass die generierten Klassendateien mit den von targetCompatibility angegebenen VMs kompatibel sind. Beachten Sie, dass in den meisten Fällen der Wert der Option -target der Wert der Option -source ist. In diesem Fall können Sie die Option -target weglassen.

Klassendateien werden auf dem von targetCompatibility angegebenen Ziel und auf späteren Versionen ausgeführt, jedoch nicht auf früheren Versionen der VM

30
A Jakhar