2017-07-28 24 views
6

mam następujący program:Eksportowanie pakietu z modułem systemu jest niedozwolona z --release

// module-info.java 
module a { 
} 

// Main.java 
public class Main { 
    public static void main(String[] args) { 
     System.out.println(sun.nio.ByteBuffered.class); 
    } 
} 

Ten program kompiluje się z powodzeniem z opcją --add-exports:

> javac --add-exports java.base/sun.nio=a module-info.java Main.java 

Jednak, gdy dodaję Argument --release nie działa:

> javac --add-exports java.base/sun.nio=a --release 9 module-info.java Main.java 
error: exporting a package from system module java.base is not allowed with --release 
1 error 

Zasadniczo te dwa polecenia są równoważne. Dlaczego więc ten drugi jest zabroniony?

Ponadto, ponieważ IDEA przekazuje do javaca argument --release, uniemożliwia to rozwój w IDEA, jeśli mój projekt wymaga wewnętrznego interfejsu API.

Używam JDK 9 + 178.

+0

@Tavo To pytanie jest o '- -add-exports'. Moje pytanie dotyczy połączenia '--add-exports' i' --release', co czyni go zupełnie innym. – ZhekaKozlov

+0

Zgadzam się, usunę komentarz :) – Tavo

+0

Jak poprawnie powiedział Michael Easter, ta kombinacja opcji została zabroniona w javacu, więc teraz jest to dla programistów IDEA, aby dostosować ich wywołanie kompilatora. Złożyłem https: //youtrack.jetbrains.com/issue/IDEA-176994 - mam nadzieję, że wkrótce zostanie naprawiona. –

Odpowiedz

3

Jak wynika z this bug ticket--release, że nie mogą być stosowane w połączeniu z --add-exports, --add-reads i --patch-module.

Z linkiem:

Ogólny wniosek o to, aby uczynić --release 9 praca konsekwentnie JDK między 9 a (przewidywanego) JDK 10, nawet kosztem a możliwie różnych zachowań poleceń jak:
$ <jdk9>/javac Test.java
$ <jdk9>/javac --release 9 Test.java

też:

Co powinno być dopuszczalne, biorąc pod uwagę zamiar --release - zezwolenie na kod kompilacji przy użyciu obsługiwanych interfejsów API dla danego wydania JDK.

W szczególności proponuje się:

[edytuj]

-prevents wykorzystanie --add wywozu, -add odczytuje i --patch moduł dla modułów systemu w połączeniu z - uwalnianiu (każda wersja)

Here jest diff plik, który zawiera:

eksportu pakiet z modułu systemu {0} jest wsp lowed z --release

nie mogę wypowiedzieć się na temat uzasadnienia, lecz z powyższym cytatem, ponieważ odnosi się do umożliwienia JDK 9 konsekwentnie pracować z JDK 10.

+0

Java 10 nie zezwala na eksport pakietów z modułów platformy? – ZhekaKozlov

+0

Java 10 nie zezwala na kombinację '--release' i eksport pakietów z modułów platformy. Nie jestem pewien, czy możemy wywnioskować, że tylko '--add-exports' nie jest dostępne w Javie 10. To jest osobne pytanie. Proszę przyjąć odpowiedź, która najlepiej odpowiada na twoje pierwotne pytanie. –

+2

Odpowiedź jest poprawna. Idea '--release' pozwala na kompilację z * publicznym * API * specyficznego * wydania, którego podpisy są rejestrowane i pakowane w javac. Z drugiej strony, '--add-exports' i jego znajomi pozwalają na zmianę * prywatnego * (jak również publicznego) API wersji * current *. Aby umożliwić kombinację tych opcji, javac musiałby mieć zapis wszystkich pakietów i klas wszystkich wydań. –

Powiązane problemy