Эта статья предназначена как дополнение к Энджи Джонс “IntelliJ – Ошибка: java: версия выпуска 5 не поддерживается”.
В своей статье Энджи предлагает решения для IntelliJ IDEA, показывающие сообщение об ошибке “версия выпуска 5 не поддерживается”. Первые два варианта работают в рамках IDEA, но не являются устойчивыми, как вы узнаете позже. Последний вариант решает реальную проблему, но только для сборок на основе Maven. Напомним, что правильное решение для сборок на основе Maven (см. Также Плагин компилятора Maven) заключается в следующем:
1.8 1.8
Я хотел бы дать некоторую информацию об этой проблеме и предложить решить ее по-другому.
В чем на самом деле проблема?
Чтобы найти правильное решение для всех типов Java-проектов, независимо от инструмента сборки, давайте углубимся в реальную проблему.
За более чем 20-летнюю историю Java прошла через несколько основных версий. Каждый из них представил новую версию формата двоичных файлов, а иногда и языковые функции (например, перечисления в Java 5, лямбды в Java 8, модули в Java 9, var в Java 10, клиент HTTP-2 Java 11 … ). Тем не менее, Java и ее виртуальная машина обладают высокой обратной совместимостью. Вы можете взять двоичные файлы 20-летней давности, и они будут работать с последней версией Java просто отлично (применяются исключения).
Компилятор Java, который генерирует двоичные файлы из исходных файлов Java, поддерживает кросс-компиляцию на различные языковые уровни, то есть создает эти двоичные файлы в форматах разных версий Java. Однако иногда поддержка более старых языковых уровней прекращается. Начиная с Java 9, компилятор больше не может генерировать двоичные файлы Java 5. Если компилятор теперь запускается – прямо или косвенно через средство сборки – с целевой версией Java 5, он покажет сообщение об ошибке release version 5 not supported.
Правильные Решения
Итак, ваш JDK слишком новый, чтобы генерировать двоичные файлы Java 5. Есть два решения для решения этой проблемы.
Используйте более старый JDK
Как упоминалось ранее, JDK9 отказался от поддержки кросс-компиляции в двоичные файлы Java 5. Это означает, что до тех пор, пока вы используете JDK 8 или ниже, вы действительно можете создавать двоичные файлы Java 5. Однако этот метод НЕ рекомендуется. Не должно быть никаких причин придерживаться Java 5 в рабочей среде выполнения. JDK 5 не поддерживается с 2015 года, и исправления безопасности больше не предоставляются.
Измените желаемый уровень целевого языка
Вместо кросс-компиляции в двоичные файлы Java 5 вам следует создавать двоичные файлы, соответствующие версии рабочей среды Java runtime environment. Это должно быть по крайней мере Java 8 до 2023 года, чтобы получить исправления безопасности. Смотрите также Историю версий Java в Википедии. Тем не менее, я рекомендую использовать Java 11, чтобы использовать различные новые функции, введенные между ними, и в то же время оставаться на версии LTS.
Итак, как же тогда изменить целевую версию?
Проекты на основе Maven
По очень веским причинам Maven по-прежнему широко используется в экосистеме Java. Однако Maven довольно старый, как и некоторые настройки по умолчанию. Одним из которых является уровень языка, который по умолчанию равен Java 1.5, независимо от используемого вами JDK.
В обычных проектах Maven вы можете вставить вышеупомянутый код в свой конфигурационный файл сборки pom.xml чтобы установить уровень целевого языка.
1.8 1.8
В проектах Spring Boot код немного меняется на
1.8
После изменения pom.xml вам необходимо повторно импортировать все проекты Maven в IntelliJ IDEA. Самый простой способ сделать это – нажать cmd + shift + A (shift + ctrl + A в Windows/Linux), а затем просто начать печатать.
Простые проекты IntelliJ IDEA
Если вы не выбрали какую-либо систему сборки для своих Java-проектов в IntelliJ, вам просто нужно убедиться, что уровень языка настроен в соответствии с JDK проекта. Вы можете сделать это в настройках структуры проекта. Нажмите cmd +shift +A и начните вводить текст, чтобы открыть настройки. Как только вы используете JDK 9+, вам нужно соответствующим образом изменить целевой уровень.
- Java 9-11: Целевой уровень Java 6
- Java 12+: Целевой уровень Java 7
Вывод
В этом посте я объяснил основную причину сообщения об ошибке версия release 5 не поддерживается. Эту проблему можно обойти локально, изменив настройки проекта IntelliJ. Однако, если вы хотите решить проблему должным образом, вам необходимо изменить файл конфигурации сборки проекта. В противном случае при следующем импорте в IntelliJ вам нужно будет изменить его снова. Кроме того, сборка может вести себя по-разному на каждом компьютере. Сервер CI и другие, которые не изменили свои настройки IntelliJ IDEA, продолжат создавать двоичные файлы Java 5. Сохранение уровня языка в файле конфигурации сборки приведет к стабильным и предсказуемым результатам на разных компьютерах.
Оригинал: “https://dev.to/lopitz/proper-solutions-for-error-java-release-version-5-not-supported-4m5f”