Перейти к основному содержимому

Почему Maven использует другой JDK

· 3 мин. чтения

1. Обзор

В этом руководстве мы объясним, почему Maven может использовать версию Java, отличную от версии по умолчанию, установленной в системе. Кроме того, мы покажем, где находятся файлы конфигурации Maven. Затем мы объясним, как настроить версию Java в Maven.

2. Конфигурация Maven

Во-первых, давайте рассмотрим возможную конфигурацию системы, в которой Maven использует версию Java, отличную от установленной в системе по умолчанию. Конфигурация Maven возвращает:

$ mvn -v
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T17:41:47+01:00)
Maven home: C:\Users\test\apps\maven\3.3.9
Java version: 11.0.10, vendor: Oracle Corporation
Java home: C:\my\java\jdk-11.0.10
Default locale: pl_PL, platform encoding: Cp1250
OS name: "windows 10", version: "10.0", arch: "amd64", family: "dos"

Как мы видим, он возвращает версию Maven, версию Java и информацию об ОС. Инструмент Maven использует JDK версии 11.0.10.

Давайте теперь посмотрим на версию Java, установленную в нашей системе:

$ java -version
java version "13.0.2" 2020-01-14
Java(TM) SE Runtime Environment (build 13.0.2+8)
Java HotSpot(TM) 64-Bit Server VM (build 13.0.2+8, mixed mode, sharing)

JDK по умолчанию установлен на 13.0.2. В следующих разделах мы объясним, почему он не соответствует тому, который использует Maven.

3. Глобальная настройка JAVA_HOME

Давайте посмотрим на настройку по умолчанию. Прежде всего, переменная JAVA_HOME является обязательной конфигурацией Maven . Более того, когда он не настроен, команда mvn возвращает сообщение об ошибке:

$ mvn
Error: JAVA_HOME not found in your environment.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation.

В Linux мы устанавливаем системную переменную с помощью команды экспорта . Для этой цели в Windows есть специальные настройки системных переменных . Когда он установлен глобально, Maven использует версию Java по умолчанию, установленную в системе.

4. Файлы конфигурации Maven

Давайте теперь быстро посмотрим, где найти файлы конфигурации Maven. Есть несколько мест, где можно предоставить конфигурацию :

  • .mavenrc/mavenrc_pre.cmd — пользовательский скрипт, расположенный в домашнем каталоге пользователя.
  • settings.xml — файл, расположенный в каталоге ~/.m2 , который содержит конфигурацию для разных проектов .
  • .mvn — каталог с конфигурацией, расположенный внутри проекта

Кроме того, мы можем использовать переменную среды MAVEN_OPTS для настройки параметров запуска JVM.

5. Настройка JAVA_HOME только для Maven

Мы увидели, что версия Java отличается от той, которую использует Maven. Другими словами, Maven перезаписывает конфигурацию по умолчанию, предоставленную переменной JAVA_HOME .

Его можно установить в определяемом пользователем сценарии, выполняемом в начале команды mvn . В Windows мы устанавливаем его в файле %HOME%\mavenrc_pre.bat или %HOME%\ mavenrc_pre.cmd . Maven поддерживает файлы .bat и .cmd. В файле мы просто устанавливаем переменную JAVA_HOME :

set JAVA_HOME="C:\my\java\jdk-11.0.10"

С другой стороны, в Linux есть файл $HOME/.mavenrc для той же цели . Здесь мы устанавливаем переменную почти так же:

JAVA_HOME=C:/my/java/jdk-11.0.10

Благодаря этой настройке Maven использует JDK 11, хотя по умолчанию в системе используется JDK 13.

Мы можем пропустить выполнение пользовательского скрипта с флагом MAVEN_SKIP_RC .

Кроме того, мы могли бы установить переменную непосредственно в исполняемом файле Maven. Однако такой подход не рекомендуется, поскольку он не будет применяться автоматически, если мы обновим Maven до более высокой версии.

6. Заключение

В этой короткой статье мы объяснили, как Maven может использовать версию Java, отличную от версии по умолчанию. Затем мы показали, где находятся файлы конфигурации Maven. Наконец, мы объяснили, как настроить версию Java для Maven.