Правильно настройте 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, это будет способ сделать это пока. В противном случае, из того, что я видел, вы сделали это правильно, и как только это будет исправлено, оно будет работать нормально.