Maven: обеспечить совместимость версий Java

Моя текущая задача - обеспечить выполнение данного Java-проекта на Java (JRE) от версии 6 до версии 9. Есть ли способы сделать это с помощью Maven?

Я предполагаю, что настройка maven-compilter-plugin является частью этого. Должно быть

<source>1.6</source>

чтобы гарантировать, что не используются функции более поздних версий? А что насчет <target>?

И с какой версией Java должен работать Maven? Java 9?

Также интересно выглядит animal-sniffer-maven-plugin. , но не знаю, как он здесь подходит. Это также сложно, потому что Java 6 на самом деле не является минимальным API, поскольку AFAIK у него есть некоторые классы, которых нет в Java 9 (например, некоторые из пакетов sun и com.sun).

Что еще? Кто-нибудь это уже делал?


person Marcus    schedule 05.05.2017    source источник
comment
См. Также: stackoverflow.com/questions/36583118/is- maven-ready-for-jdk9   -  person ZhekaKozlov    schedule 05.05.2017
comment
Пакеты com.sun не являются частью API и никогда не должны использоваться приложениями.   -  person Kevin Krumwiede    schedule 05.05.2017
comment
Ну это не мое приложение. Я не использовал эти классы com.sun в проекте, как это делал кто-то еще много лет назад. Наверное, я тот, кто их найду и заменю ...   -  person Marcus    schedule 05.05.2017
comment
@mbee Если вы используете классы из com.sun, тогда он не будет работать в Java 9 с JPMS. Сначала вам нужно будет реорганизовать свое приложение, чтобы оно подходило для Java 9.   -  person Uwe Plonus    schedule 05.05.2017
comment
Последний комментарий в основном ложный. Большинство com.sun пакетов все еще существуют, и их можно сделать доступными с помощью флагов командной строки --add-exports - см. java -X или javac -X. Взгляните на этот пост, чтобы увидеть как использовать Maven <args> с этими флагами.   -  person Nicolai Parlog    schedule 06.05.2017
comment
Вы можете найти этот ответ полезным: stackoverflow.com/a/26565660/363573. Он использует подключаемый модуль maven enforcer для поиска зависимостей, использующих другую версию Java, чем вам хотелось бы.   -  person Stephan    schedule 21.09.2017


Ответы (1)


Некоторые примечания по этому поводу (возможно, не совсем ответ):

Сначала плагин animal-sniffer-maven-plugin может проверить, использует ли ваш код только код из JDK 6 (API), который является самой низкой частью, которую вам нужно проверить (или других версий JDK). Кроме того, вам необходимо проверить, есть ли у вашего проекта зависимости от jar-файлов, которые содержат байтовый код, и для этого не требуется больше, чем код на основе JDK 6.

<target>/<source> не гарантирует подобных вещей. Они только гарантируют, что результирующий файл jar (формат файла класса) будет работать как минимум с JRE 6, но не гарантируют, что он также будет работать на JRE 9.

Если вам нужно запустить JRE 9, вам необходимо иметь файл module-info.java в вашем проекте.

Кроме того, ваш проект использует com.sun.*, у вас много дел, потому что, насколько я помню, большинство или все из них были объявлены устаревшими / или com.sun.* только внутренними и не являющимися частью общедоступного API (если бы вы работали на Mac с JDK эти классы не существуют) очень долго (см. здесь).

Вы можете ознакомиться с Maven Core потому что нам нужно убедиться, что Maven также работает на JRE 9 ... (Мы используем пакет JDK 9 EA для тестирования) .. Здесь мы используем

person khmarbaise    schedule 05.05.2017