2017-12-14 7 views
7

Ich versuche ein Projekt mit JDK 9 zu erstellen, da das Argument --release für javac bedeutet, dass es für ältere Versionen erstellen kann, ohne dass das entsprechende JDK/JRE installiert sein muss. Ich muss Java 6 unterstützen, so dass mein vorheriges Setup Java 6 für den bootstrapClasspath und ein weiteres JDK 8 oder 9 für grittle und die IDE benötigt. Ich würde JDK 6 lieber zugunsten von 9 eliminieren und den Build etwas aufräumen.Targeting Java 6 mit Java 9 JDK gibt Warnungen

Mein neues build.gradle hat die folgende Konfiguration:

tasks.withType(JavaCompile) { 
    options.compilerArgs.addAll(['--release', '6', "-Xlint"]) 
} 

Die sourceCompatibility, targetCompatibility und bootstrapClasspath Optionen nicht gesetzt sind, wie ich das --release Argument behandelt dies jetzt verstehen.

Ich erhalte die folgenden Warnungen:

warning: [options] source value 1.6 is obsolete and will be removed in a future release 
warning: [options] target value 1.6 is obsolete and will be removed in a future release 
warning: [options] To suppress warnings about obsolete options, use -Xlint:-options. 

Ich weiß, dass diese unterdrückt werden kann (es sagt, es ist genau dort), aber ich hatte nicht erwartet, sie zu sehen. Beim Erstellen mit --release [7-9] sind diese Warnungen nicht vorhanden.

Für Kontext, das ist die alte (nicht verwendet jetzt) ​​config '2x JDK':

sourceCompatibility = "1.6" 
targetCompatibility = "1.6" 

tasks.withType(JavaCompile) { 
    options.bootstrapClasspath = new SimpleFileCollection(Arrays.asList(new File("$JDK6_HOME/jre/lib/rt.jar"))) 
} 

Bin ich die Compiler-Argumente falsch Einstellung? Gibt es eine Möglichkeit, source und target nicht zu setzen/zu setzen?

+2

Sie erklärte, warnt davor, dass Java6 Targeting mit neuen Versionen von Arbeits könnte aufhören JDK8/9+ und es ist egal, ob du '-source' &&' -target' oder die neue '--release' verwendest. – user158037

+0

--release ist im Grunde abgekürzt für -source -target -bootclasspath Könnte sein, dass es diese Flags unter der Haube verwendet oder sieht sie als similair. Daher die Warnungen. – trappski

+0

@ user158037 warum warnte es nicht auch für Java 7? – Sam

Antwort

6

Obwohl dies nicht aus einer offiziellen Quelle, aber die Warnung scheint mit der „eins plus drei zurück“ Klausel ausgerichtet werden, wie in dem JEP182#Policy for Retiring javac -source and -target Options erklärte

JDK 9 wird implementieren Sie eine "eins plus drei zurück" Support-Richtlinie Bedeutung , dass 1.9/9, 1.8/8, 1.7/7 und 1.6/6 in dieser Release erkannt werden. Diese Politik wird 10.

So in JDK weiterhin ideal 1.6 sollte mit der Warnung nehmen in guter Wirkung mit JDK10 in Bild entfernt werden für die Kunden bewusst der Politik zu sein.

Edit: Doch wie spitz von Alan in comments 10 JDK wird --release 6 weiterhin unterstützen, wie gerade in this mailiing list.

+0

Macht Sinn, 1,5 ist in 8 veraltet, 1,6 ist in 9 veraltet .. – Sam

+6

JDK 10 wird weiterhin '- Release 6' unterstützen. Mehr dazu hier: http://mail.openjdk.java.net/pipermail/jdk-dev/2017-Dezember/000321.html –

+0

@AlanBateman Würde die Antwort mit dem gleichen aktualisieren. Hoffentlich sollte das auch als offizielle Bestätigung dienen. :) – nullpointer