2017-12-14 242 views
7

Próbuję zbudować projekt przy użyciu JDK 9, ponieważ używanie argumentu javac za pomocą argumentu --release oznacza, że ​​może on budować dla starszych wersji bez konieczności instalowania odpowiedniego JDK/JRE. Potrzebuję obsługi Java 6, więc moja istniejąca konfiguracja wymaga środowiska Java 6 dla bootstrapClasspath i dalszego JDK 8 lub 9 dla gradle i IDE. Chciałbym wyeliminować JDK 6 na korzyść używania tylko 9 i trochę uporządkować kompilację.Kierowanie Java 6 z Java 9 JDK daje ostrzeżenia

Mój nowy build.gradle ma następującą konfigurację:

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

sourceCompatibility, targetCompatibility i bootstrapClasspath opcje nie są ustawione, jak rozumiem --release argumentem obsługuje to teraz.

uzyskać następujące ostrzeżenia:

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. 

Znam te mogą być tłumione (mówi, że właśnie tam), ale nie spodziewałem się zobaczyć ich. Podczas budowania z --release [7-9] te ostrzeżenia nie są obecne.

Dla kontekście, jest to stary (nieużywany teraz) '2x JDK' config:

sourceCompatibility = "1.6" 
targetCompatibility = "1.6" 

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

jestem ustawiania argumenty kompilatora nieprawidłowo? Czy istnieje sposób, aby nie ustawić/wyłączyć source i target?

+2

To tylko ostrzega, że ​​kierowanie java6 może przestać działać z nowymi wydaniami JDK8/9+ i nie ma znaczenia, jeśli użyjesz '-source' &&' -target' lub nowego '--release'. – user158037

+0

- to skrót od -source -target -bootclasspath Być może używa tych flag pod maską lub widzi je jako similair. Stąd ostrzeżenia. – trappski

+0

@ user158037 Dlaczego jednak nie ostrzegał również o Java 7? – Sam

Odpowiedz

6

Choć nie jest to z oficjalnego źródła, ale ostrzeżenie wydaje się być zgodne z „jeden plus trzy back” klauzuli jak stwierdzono w JEP182#Policy for Retiring javac -source and -target Options

JDK 9 będzie wdrożenie zasady wsparcia "jeden plus trzy zwroty" oznaczające , że 1.9/9, 1.8/8, 1.7/7 i 1.6/6 zostaną uznane w tym wydaniu . Że polityka będzie kontynuowana w JDK 10.

Więc idealnie 1.6 powinien zostać usunięty z JDK10 w obrazie z podjęciem ostrzeżenie w dobrym skutkiem dla klientów, aby zdawać sobie sprawę z polityki.

Edit: Jednak, jak wskazał przez Alan in comments JDK 10 będzie nadal wspierać --release 6 jak stwierdzono w this mailiing list.

+0

Ma sens, 1.5 jest przestarzałe w 8, 1.6 jest przestarzałe w 9 .. – Sam

+6

JDK 10 będzie nadal wspierać '--release 6'. Więcej na ten temat tutaj: http://mail.openjdk.java.net/pipermail/jdk-dev/2017-December/000321.html –

+0

@AlanBateman Uaktualniłby odpowiedź tak samo. Mam nadzieję, że powinno to być również oficjalne potwierdzenie. :) – nullpointer