У меня есть проект maven, использующий Java 17. Для maven-compiler-pugin установлено значение <release>17</release>.
Если я создам этот проект с использованием более новой версии JDK (например, 21), будет ли созданный Jar работать с JRE 17?
Если только вы не используете какую-либо новую функцию, отсутствующую в версии 17. Также есть предостережение относительно Unicode. В качестве ограничения реализации --release версия Unicode данной целевой платформы не используется во время компиляции; Вместо этого используется версия Unicode текущей платформы. См. также JEP 247.
Даже если вы используете более новую функцию, в этом случае сборка завершится неудачно!




Короткий ответ – да.
Используемое вами свойство release должно охватывать как созданную версию класса, так и использование API, доступного в Java 17.
Всегда есть оговорка, что вы можете неявно полагаться на какое-то недокументированное внутреннее поведение и/или исправление ошибок, присутствующее в Java 21, которого не будет в Java 17, но на самом деле это должны быть редкие случаи.
Да, так и должно быть. Обычно вам следует стараться установить как можно более низкую версию.