Как скомпилировать с Java 11 target Java 1.8 в IntelliJ - PullRequest
4 голосов
/ 10 апреля 2019

Я пытаюсь скомпилировать с JDK 11, но нацеливаюсь на Java 1.8 в IntelliJ.Я настроил:

  • Настройки проекта:
    • SDK проекта: 11
    • Уровень языка проекта: 8
  • JavaНастройки компилятора:
    • Использовать опцию --release для кросс-компиляции (Java 9 и новее)
    • Версия байт-кода проекта: 8
  • МодульНастройки:
    • Project SDK (11)
    • Уровень языка: Проект по умолчанию (8 - лямбда-выражения, примечания типа и т. Д.)

Iполучить кучу ошибок компиляции о том, что внутренние пакеты не существуют.--add-exports недопустимо с --target 1.8, поэтому это не помогает.

Единственное, что работает, - это установить Project SDK обратно на Java 1.8 (что вызывает другие проблемы при попытке запустить с Java11, но это еще одна проблема).

Можно ли скомпилировать с JDK 11 и нацелить на Java 1.8 в IntelliJ?

Есть другие связанные вопросы, которые, похоже, работают, но не от IntelliJ:

1 Ответ

4 голосов
/ 10 апреля 2019

К сожалению, вы не можете использовать внутренние API, если вы компилируете с опцией --release N. Это описано в JEP 247 :

Определяется новый параметр командной строки --release, который автоматически настраивает компилятор для создания файлов классов, которые будут ссылаться на реализация данной версии платформы. - отпустите N is примерно эквивалентно:

для N <9: -источник N -цель N -bootclasspath <документированный-API-от-N>,

для N> = 9: -источник N -цель N - система .

А затем следует основной абзац:

Для N <9 документированные API состоят из <b>открытых API , которые были на Стандартный путь загрузки javac для JDK N.

Я согласен, что на самом деле это большое ограничение. Вы даже не можете использовать sun.misc.Unsafe, который всегда был важной частью OpenJDK.

Итак, ваш вопрос не имеет ничего общего с IntelliJ IDEA. Это ограничение платформы Java.

У вас есть два способа:

  • Не использовать внутренние API
  • Используйте JDK 8 для компиляции
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...