Совместимость Jar, скомпилированного с более новой версией JDK

У меня есть проект maven, использующий Java 17. Для maven-compiler-pugin установлено значение <release>17</release>.
Если я создам этот проект с использованием более новой версии JDK (например, 21), будет ли созданный Jar работать с JRE 17?

Да, так и должно быть. Обычно вам следует стараться установить как можно более низкую версию.

g00se 06.06.2024 11:46

Если только вы не используете какую-либо новую функцию, отсутствующую в версии 17. Также есть предостережение относительно Unicode. В качестве ограничения реализации --release версия Unicode данной целевой платформы не используется во время компиляции; Вместо этого используется версия Unicode текущей платформы. См. также JEP 247.

Elliott Frisch 06.06.2024 12:47

Даже если вы используете более новую функцию, в этом случае сборка завершится неудачно!

khmarbaise 06.06.2024 15:37
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
3
80
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Короткий ответ – да. Используемое вами свойство release должно охватывать как созданную версию класса, так и использование API, доступного в Java 17.

Всегда есть оговорка, что вы можете неявно полагаться на какое-то недокументированное внутреннее поведение и/или исправление ошибок, присутствующее в Java 21, которого не будет в Java 17, но на самом деле это должны быть редкие случаи.

Другие вопросы по теме