Правильно настройте Java 9 как SDK в Intellij IDEA на Linux из-за новой структуры папок

Прежде чем написать мне, пожалуйста, подумайте, что ни один из них не отвечает на мой вопрос:


В IntelliJ IDEA 2017.2.6 попытка добавления JDK9 в качестве SDK проходит, но не работает, так как пути pathpathy пустые. Шаги для воспроизведения:

  • Откройте 'Добавить новый диалог SDK'
    (перейдите в "Настройки проекта" > "Проект" > "SDK проекта" > "Создать" > "JDK" )
  • Выберите JDK 9
    select jdk dialog
  • Проходит, но если вы посмотрите в SDK > JDK9, то пути к классам пустые, а ошибки вашего кода из-за отсутствия базовых классов. Посмотреть изображение:
    no classpaths

В IntelliJ IDEA 2017.3 EAP вы получаете ошибку о том, что классы JDK не найдены. Смотрите изображения ниже:

  • Откройте 'Добавить новый диалог SDK'
    (перейдите в "Настройки проекта" > "Проект" > "SDK проекта" > "Создать" > "JDK" )
  • Выберите JDK 9
    select jdk dialog
  • Должен пройти, но создает всплывающее окно ошибки
    jdk error popup

Компиляция командной строки примера HelloWorld с помощью jdk9 работает как ожидалось.

EDIT: найден почти дубликат: Intellij IDEA 2017.2 не может добавить openjk 9 в Linux Mint 18. Основные отличия:

  • Версия Linux: они используют Mint 18, и я использую Debian Stretch.
  • OpenJDK является последним из репо на момент написания: 9 ~ b181-4 ~ bpo9 + 1. Хотя это одна и та же версия, она по-прежнему не работает в моем случае.

EDIT: Еще один возможный дубликат: intellij идея не видит java 9 стандартных классов

Я не понял ответа из комментариев. Пробовал устанавливать разные имена для JDK (9 и 1.9), но он по-прежнему не отображал модули, а не classpaths, а classpaths оставались пустыми.

Ответы

Ответ 1

Пакет Debian содержит неверно скомпилированный файл lib/jrt-fs.jar.
Есть две зарегистрированные проблемы отдельно на идея youtrack, а также стартовая панель ubuntu.

Как указано здесь:

Вероятная причина:
Классы в lib/jrt-fs.jar были скомпилированы Java 9 с опциями "источник 8" / "цель 8". Они должны быть скомпилированы с опцией "--release 8" (или Java 8)

Временное обходное решение может заменять /usr/lib/jvm/java-9-openjdk-amd64/lib/jrt-fs.jar на одно из Oracle JDK.
Вы также можете попытаться перекомпилировать источник openjdk-9, используя рекомендованный вариант "--release 8".

В любом случае я советую проголосовать за эту проблему по вышеуказанной ссылке, чтобы привлечь больше внимания разработчиком команды.

Ответ 2

Используйте Oracle Java вместо OpenJDK. Вы можете получить это в через репозиторий WebUpd8.

sudo add-apt-repository ppa:webupd8team/java &&
sudo apt-get update &&
sudo apt-get install oracle-java9-installer

Не похоже, что это будет работать с OpenJDK, поэтому, если вы хотите играть с последней и самой большой Java, это будет способ сделать это пока. В противном случае, из того, что я видел, вы сделали это правильно, и как только это будет исправлено, оно будет работать нормально.