релизная версия 1.8 не поддерживается

У меня есть проект, использующий Java 8.

До сих пор в pom мы указывали исходную и целевую версии как 1.8:

<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>

Мы хотим использовать опцию «-release» Java 9+ и добавили следующее:

<maven.compiler.release>1.8</maven.compiler.release>

Но теперь мы получаем следующую ошибку:

Fatal error compiling: release version 1.8 not supported

Мы используем maven 3.5.3, плагин maven-compiler в версии 3.8.0 и Java 10 для компиляции проекта.

Что здесь не так?


person radlan    schedule 20.09.2018    source источник
comment
Почему вы используете другую версию для компиляции? Я имею в виду Java 10 для компиляции проекта и Java 1.8 с maven? Используйте одинаковые версии   -  person Adya    schedule 20.09.2018
comment
@Adya Проект компилируется с Java 1.8, поэтому это требование в файле pom. Но, конечно, он также должен компилироваться с Java 10. Нет причин только компилировать этот проект с Java 1.8.   -  person radlan    schedule 20.09.2018


Ответы (2)


Это должно работать

<maven.compiler.release>8</maven.compiler.release>

поскольку атрибут <release> работает только с основными версиями выпусков.

Кстати, это предполагает, что это параметр, используемый в фактической конфигурации плагина компилятора, примерно так:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.0</version>
    <configuration>
        <release>${maven.compiler.release}</release>
    </configuration>
</plugin>
person Naman    schedule 20.09.2018
comment
Да, ты прав! Немного непоследовательно, что source и target позволяют 1,8, а также 8, но release only позволяет 8... - person radlan; 20.09.2018
comment
О вашем упоминании конфигурации maven-compiler-plugin: Да, но косвенно. Вышеупомянутые свойства указаны только как свойства. Мы не упомянули эти свойства явно в блоке конфигурации плагина maven-compiler-plugin, поскольку эти свойства считываются автоматически и не требуют явного объявления, как в вашем примере. - person radlan; 20.09.2018
comment
@radlan Согласен, с нынешними соглашениями. Он должен работать и при объявлении свойств. - person Naman; 20.09.2018
comment
@radlan Это несоответствие основано на том, что JDK9+ изменил версию на 9.X, тогда как JKD8 и ранее назывались 1.X... кроме того, --release .. существует только начиная с JDK9+, но не раньше... - person khmarbaise; 20.09.2018
comment
@khmarbaise Есть ли какая-либо другая документация по атрибуту release, кроме примера использования здесь maven.apache.org/plugins/maven-compiler-plugin/examples/ ? Интересно, людям было бы полезно понять, когда и почему этот атрибут был введен в плагин компилятора. - person Naman; 20.09.2018
comment
Официальная документация по инструменту javac, docs.oracle.com/javase/ 10/tools/javac.htm#JSWOR627 - person Robert Scholte; 20.09.2018
comment
@RobertScholte, на самом деле, я искал ссылку в документации плагина компилятора. - person Naman; 20.09.2018
comment
Я бы предпочел указать на спецификации, а не копировать их. Спецификации должны оставаться актуальными, весь контент, основанный на них, вероятно, нет. Но мы можем принять любой пиар :) - person Robert Scholte; 20.09.2018

В моем случае мне пришлось изменить выпуск, источник и цель.

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.release>8</maven.compiler.release>
    <maven.compiler.source>8</maven.compiler.source>
    <maven.compiler.target>8</maven.compiler.target>
  </properties>
person José Junior    schedule 18.02.2021