Экспорт пакета из системного модуля не разрешен с --release
У меня есть следующая программа:
module-info.java
module a {
}
Main.java
public class Main {
public static void main(String[] args) {
System.out.println(sun.nio.ByteBuffered.class);
}
}
Эта программа успешно компилируется с --add-exports
опция:
> javac --add-exports java.base/sun.nio=a module-info.java Main.java
Тем не менее, когда я добавляю --release
аргумент, он терпит неудачу:
> 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
По сути, эти две команды эквивалентны. Так почему последний запрещен?
Кроме того, поскольку ИДЕЯ проходит --release
В качестве аргумента для javac, это делает разработку в IDEA невозможной, если моему проекту нужен внутренний API.
Я использую JDK 9+178.
7 ответов
Из этого сообщения об ошибке следует, что --release
не может использоваться в сочетании с --add-exports
, --add-reads
, а также --patch-module
,
По ссылке:
Общее предложение здесь состоит в том, чтобы заставить make --release 9 работать согласованно между JDK 9 и (ожидаемым) JDK 10, даже за счет возможного различного поведения таких команд, как:
$ <jdk9>/javac Test.java
$ <jdk9>/javac --release 9 Test.java
Также:
Что должно быть приемлемо, учитывая намерения --release - позволяют компилировать код с использованием поддерживаемых API для данного выпуска JDK.
В частности, предложение заключается в следующем:
[редактировать]
-предотвращает использование --add-exports, -add-reads и --patch-module для системных модулей в сочетании с --release (любая версия)
Вот файл diff, который содержит:
экспорт пакета из системного модуля {0} запрещен с помощью --release
Я не могу комментировать обоснование, но из приведенной выше цитаты речь идет о том, чтобы JDK 9 работал согласованно с JDK 10.
Если вы используете идею IntelliJ, попробуйте проверить настройки вашего компилятора Java:
Перейдите в меню "Файл" -> [Настройки] -> [Сборка, Выполнение, Развертывание] -> [Компилятор Java] и проверьте настройку "Версия байт-кода проекта". Я получил аналогичную ошибку ("экспорт пакета из системного модуля java.datatransfer не разрешен с --release") при использовании JDK 11, хотя это значение все еще было установлено в версию 9. Установка его в 11 исправила проблему для меня.
Перейдите в меню "Файл" -> [Настройки] -> [Сборка, выполнение, развертывание] -> [Компилятор Java] и выберите свою версию JDK. (Убедитесь, что он выше, чем JDK 11)
Если вы используете InetlliJ Idea, сделайте этот параметр: перейдите в меню "Файл" -> [Настройки] -> [Сборка, выполнение, развертывание] -> [Компилятор Java] и выберите свою версию JDK, а иногда она пуста, поэтому вставьте версию java. например [если вы используете 11] и сохраните, затем скомпилируйте программу и запустите.