Maven строит с неправильным JDK на jenkins

Когда я пытаюсь запустить работу Jenkins Maven, я получаю следующую ошибку:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project myProject: Fatal error compiling: invalid target release: 1.8 -> [Help 1]

Это указывает на то, что Maven использует Java 1.8, но предполагается, что он использует Java 1.7.

Я запускал Maven в режиме отладки и отображал правильные версии:

...
Apache Maven 3.0.5 (r01de14724cdef164cd33c7c8c2fe155faf9602da; 2013-02-19 14:51:28+0100)
Maven home: /var/lib/jenkins/tools/hudson.tasks.Maven_MavenInstallation/maven305
Java version: 1.7.0_71, vendor: Oracle Corporation
Java home: /var/lib/jenkins/tools/hudson.model.JDK/JDK_7u71/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.8.0-44-generic", arch: "amd64", family: "unix"
...

Сервер Jenkins работает с Java 1.8

...
$ java -version
java version "1.8.0_74"
Java(TM) SE Runtime Environment (build 1.8.0_74-b02)
Java HotSpot(TM) 64-Bit Server VM (build 25.74-b02, mixed mode)
...
$ javac -version
javac 1.8.0_74
...

Я попытался запустить задание с пустой репозицией Maven и сказать Maven точно, какую версию использовать, но без успеха.

Я называю Maven следующим образом:

mvn clean install -X -DskipTests -Dmaven.repo.local=../testrepo -Djava.version=1.7

Я что-то делаю неправильно?

Ответ 1

Наконец я узнал, в чем проблема.

Я использую другой модуль в моей сборке, который я загружаю с сервера nexus. Кто-то ошибся и загрузил версию в нексус, который не синхронизирован с той, что находится под контролем версий. Версия на nexus имеет Java 1.8, но тот, у которого есть контроль версий, имеет Java 1.7, поэтому я этого раньше не заметил.

Спасибо всем за отличные ответы.

Ответ 2

Правильное решение - добавить необходимую JDK к глобальной конфигурации Jenkins, а затем специально выбрать нужную версию/установку JDK в конфигурации сборки проекта.

Начните с копирования необходимых JDK на вашу машину сборки. Затем откройте конфигурацию Jenkins и перейдите к разделу "JDK" [Jenkins → Управление Jenkins → Configure System]. Добавьте JDK в Jenkins. Следующее изображение - пример Jenkins, сконфигурированный с двумя разными JDK. JDK-установки под Jenkins

Теперь в конфигурации проекта [YourProject → Configure] будет доступен новый параметр. Вы можете выбрать желаемый JDK для создания проекта, как на картинке: введите описание изображения здесь

"(по умолчанию)" JVM в изображении относится к JDK, под которым работает Jenkins. Простое исправление - изменить этот JDK на версию, необходимую для вашего проекта (либо путем изменения запуска Jenkins script, либо с помощью JAVA_HOME). Это сработает. Однако, как только вам понадобится создать два или более конфликтных проекта, вам все равно придется настраивать несколько JDK.

Используя аналогичные шаги, вы можете добавить несколько установок maven на ваш сервер Jenkins.

Ответ 3

Попробуйте выполнить следующие действия:

1) Перейдите к разделу Управление Jenkins → Конфигурирование системы

2) Добавьте JAVA_HOME и его путь в Global Properties → Environment Variables

3) Добавить JDK и путь в разделе JDK

Если нет, попробуйте выполнить этот пост, поскольку здесь предлагается множество решений: Maven использует неправильную версию Java, когда она выполняется Jenkins

Ответ 4

В Jenkins 2.7.3 (и позже, возможно), навигация меню немного отличается:

1) Управление Дженкинсом

2) Глобальная настройка инструмента

3) Раздел JDK

4) нажмите кнопку "Установка JDK"

5) Параметры и пути JDK есть

Ответ 5

Начиная с версии Jenkins 2.60.1 (июнь 2017 года) LTS для рабочих мест maven требуется JDK 1.8 или выше. Это требует только работа maven, все остальные (например, фристайл) могут исправить версию jdk, которая лучше всего соответствует их потребностям.

Смотрите LTS Changelog:

2.60.1 - это первая версия Jenkins LTS, для работы которой требуется Java 8. Если вы используете тип проекта Maven, обратите внимание, что для этого требуется JDK, способный запускать Jenkins, т.е. JDK 8 или выше. Если вы сконфигурируете старый JDK в проекте Maven, Дженкинс попытается найти более новый JDK и использовать его автоматически.

Примечания по совместимости

Использование типа проекта Maven с Java 7

Пользователи с заданиями, настроенными с типом "Проект Maven", могут не иметь возможности использовать Java 7 для своих заданий Maven. Правильное поведение не гарантируется, поэтому действуйте на свой страх и риск. Проект Maven использует Jenkins Remoting для установки "перехватчиков" в исполняемом файле Maven. Из-за этого Maven использует Remoting и другие базовые классы Jenkins, и такое поведение может нарушить обновление.