Как установить конкретную версию Java для Maven
На моей машине установлены две версии Java: (1.6 и 1.7, установленные мной вручную). Мне они оба нужны для разных проектов. Но для Maven мне нужен 1.7, теперь мой Maven использует версию java 1,6, как мне настроить Maven на использование 1.7?
30 ответов
Maven использует JAVA_HOME
параметр, чтобы найти, какую версию Java предполагается запустить. Я вижу из вашего комментария, что вы не можете изменить это в конфигурации.
- Вы можете установить
JAVA_HOME
параметр непосредственно перед запуском maven (и при необходимости измените его обратно). - Вы также можете пойти в свой
mvn
(Без окна) /mvn.bat
/mvn.cmd
(Windows) и явно установите свою версию Java.
Добавление решения для людей с несколькими установленными версиями Java
У нас есть большая кодовая база, большая часть которой находится на Java. Большая часть того, над чем я работаю, написана на Java 1.7 или 1.8. поскольку JAVA_HOME
статично, я создал псевдонимы в моем .bashrc
для запуска Maven с разными значениями:
alias mvn5="JAVA_HOME=/usr/local/java5 && mvn"
alias mvn6="JAVA_HOME=/usr/local/java6 && mvn"
alias mvn7="JAVA_HOME=/usr/local/java7 && mvn"
alias mvn8="JAVA_HOME=/usr/local/java8 && mvn"
Это позволяет мне запускать Maven из командной строки на моей машине для разработки независимо от версии JDK, используемой в проекте.
В POM вы можете установить свойства компилятора, например, для 1.8:
<project>
...
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
...
</project>
Я только недавно, после семи долгих лет с Maven, узнал о toolchains.xml. У Maven это даже задокументировано и поддерживается с 2.0.9 - документация по цепочкам инструментов
Поэтому я добавил файл toolchain.xml в папку ~/.m2/ со следующим содержимым:
<toolchains xmlns="http://maven.apache.org/TOOLCHAINS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/TOOLCHAINS/1.1.0 http://maven.apache.org/xsd/toolchains-1.1.0.xsd">
<!-- JDK toolchains -->
<toolchain>
<type>jdk</type>
<provides>
<version>1.8</version>
<vendor>sun</vendor>
</provides>
<configuration>
<jdkHome>/opt/java8</jdkHome>
</configuration>
</toolchain>
<toolchain>
<type>jdk</type>
<provides>
<version>1.7</version>
<vendor>sun</vendor>
</provides>
<configuration>
<jdkHome>/opt/java7</jdkHome>
</configuration>
</toolchain>
</toolchains>
Это позволяет вам определить, какие разные JDK Maven могут использовать для создания проекта, независимо от того, с чем запускается JDK Maven. Вроде как, когда вы определяете JDK на уровне проекта в IDE.
На окнах
Если вы не хотите менять свой JAVA_HOME
переменная внутри системных переменных.
Отредактируйте свой mvn.bat
файл и добавьте строку, как это
set JAVA_HOME=C:\Program Files\Java\jdk1.7.0_45\jre
Это можно сделать после @REM ==== START VALIDATION ====
как упомянуто @Jonathan
На Mac (и Linux?)
Если вы не хотите менять свой JAVA_HOME
переменная внутри вашего ~/.bashrc
или же ~/.bash_profile
Вы можете создать ~/.mavenrc
подать и переопределить ваш JAVA_HOME
используя инструмент java_home
export JAVA_HOME=`/usr/libexec/java_home -v 1.7.0_45`
Санитарная проверка
Вы можете убедиться, что все работает нормально, выполнив следующие команды. Версия JDK должна быть другой.
mvn -version
затем
java -version
Добавление двух моих центов и явное предоставление решения.
На моем компьютере с Windows установлено два пакета JDK. JDK 1.5
а также JDK 1.6
,
Мое значение по умолчанию (и значение переменной среды Windows) JAVA_HOME
установлен в JDK 1.5
,
Тем не менее, у меня есть проект Maven, который мне нужно построить (например, Etsy.com JBehave Tutorial) с использованием JDK 1.6
,
Мое решение в этом сценарии (которое сработало!), Как предложено @DanielBarbarian
установить его в mvn.bat
,
Для некоторых, не знакомых с командным файлом окна, я просто добавил set JAVA_HOME=<path_to_other_jdk>
строка после @REM ==== START VALIDATION ====
в mvn.bat
(То есть, %MAVEN_HOME%\bin\mvn.bat
):
@REM ==== START VALIDATION ====
set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_45\jre
if not "%JAVA_HOME%" == "" goto OkJHome
Вы можете настроить Maven на использование любой версии Java, следуя инструкциям ниже.
Установите jenv на вашу машину по ссылке
Проверьте доступные версии Java, установленные на вашем компьютере, введя следующую команду в командной строке.
версии jenv
Вы можете указать глобальную версию Java, используя следующую команду.
jenv global oracle64-1.6.0.39
Вы можете указать локальную версию Java для любого каталога (Project), используя следующую команду в каталоге в командной строке.
jenv local oracle64-1.7.0.11
Добавьте правильную версию Java в ваш pom.xml
если вы используете maven в командной строке, установите плагин jenv maven, используя команду ниже
jenv enable-plugin maven
Теперь вы можете настроить любую версию Java на вашем компьютере для любого проекта без каких-либо проблем.
Одно простое решение проблемы -
JAVA_HOME=/ usr / lib / jvm / java-6-sun / mvn чистая установка
На Mac это будет выглядеть примерно так:
JAVA_HOME=/ Библиотека /Java/JavaVirtualMachines/jdk1.7.0_21.jdk/ Содержание / Главная / mvn clean install
PS: Один особый случай, который я обнаружил, это приведенная выше команда, которая не работает с оболочкой 'fish'. У меня также была оболочка bash, и там она работала нормально. просто используйте команду 'bash', чтобы переключиться на оболочку bash.
На Mac (если у вас установлена правильная версия)
JAVA_HOME=`/usr/libexec/java_home -v 1.8` mvn clean install -DskipTests
Я использую Mac, и ни один из приведенных выше ответов мне не помог. Я обнаружил, что maven загружает собственный JAVA_HOME из пути, указанного в:
~/.mavenrc
Я изменил содержимое файла на:
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home
Для Linux это будет выглядеть примерно так:
export JAVA_HOME=/usr/lib/jvm/java-8-oracle/jre
Вы можете настроить компиляцию источников, используя разные JDK с maven-compiler-plugin
,
Просто укажите путь к javac
в <executable>
тег. Например, для java11 это выглядит так:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>11</source>
<target>11</target>
<fork>true</fork>
<executable>C:\Program Files\Java\jdk-11.0.1\bin\javac</executable> <!--PATH TO JAVAC -->
</configuration>
</plugin>
В Windows я просто добавляю несколько командных файлов для разных версий JDK в папку Maven bin следующим образом:
mvn11.cmd
@echo off
setlocal
set "JAVA_HOME=path\to\jdk11"
set "path=%JAVA_HOME%;%path%"
mvn %*
тогда вы можете использовать mvn11
запустить Maven в указанном JDK.
Не изменяя переменные среды, вы можете управлять версией java на основе уровня проекта с помощью подключаемого модуля компилятора Maven.
Способ 1
<properties>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
Способ 2
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
Чтобы избежать какого-либо влияния на ваш проект и переменные среды, вы можете настроить плагин компилятора Maven только для POM проекта, указав java-версию Source и Target.
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
...
</plugins>
Недавно установил Java10, чтобы узнать, что нового и интересного в нем. Как только я это сделал и попробовал запустить существующие проекты, использующие java8. К моему удивлению, maven начал использовать java10 в качестве версии java по умолчанию, хотя мой JAVA_HOME настроен на использование java8 - / usr / libexec / java_home -v 1.8
Учитывая, что моя установка была произведена с использованием brew - Brew - это просто менеджер пакетов для Mac OS, мой M2_HOME был настроен автоматически. Обычно это /usr/local/Cellar/maven/3.5.4.
Обладая этими новыми знаниями, я запускаю nano /usr/local/Cellar/maven/3.5.4/bin/mvn.
#! / bin / bashJAVA_HOME="${JAVA_HOME:-$(/usr / libexec / java_home)}" exec "/usr/local/Cellar/maven/3.5.4/libexec/bin/mvn" "$@"
Важный бит
"${JAVA_HOME:-$(/usr / libexec / java_home)}"
Чтобы решить эту проблему, вам нужно будет указать версию Java, которую maven должен использовать по умолчанию. Так что в моем случае мне понадобился java8.
Обновите /usr/local/Cellar/maven/3.5.4/bin/mvnfile следующим образом
#! / bin / bashJAVA_HOME="${JAVA_HOME:-$(/usr / libexec / java_home -v 1.8)}" exec "/usr/local/Cellar/maven/3.5.4/libexec/bin/mvn" "$@ "
Я использую чип MAC Mini - M1, после установки maven через brew install maven я заметил, что он использует java 19, но я скорее хотел использовать версию java 17, которую я загрузил на свою машину. Не повезло с конкретными инструкциями по сбросу версии mvn java по умолчанию. Вот шаги, которые вы можете выполнить.
-
mvn --version
# это даст, где установлен maven в моем случае Maven home:/opt/homebrew/Cellar/maven/3.8.7/libexec
- затем перейдите к
/opt/homebrew/Cellar/maven/3.8.7/bin
папка - отредактируйте файл mvn, я использовал
vi mvn
- ниже я отредактировал местоположение jdk, чтобы указать, где у меня есть java 17 jdk
#!/bin/bash
JAVA_HOME="${JAVA_HOME:-/Library/Java/JavaVirtualMachines/jdk-17.0.3.1.jdk/Contents/Home}" exec "/opt/homebrew/Cellar/maven/3.8.7/libexec/bin/mvn" "$@"
- сохранить файл mvn после редактирования
-
mvn -v
теперь будет отображаться версия Java по умолчанию 17
Apache Maven 3.8.7 (b89d5959fcde851dcb1c8946a785a163f14e1e29)
Maven home: /opt/homebrew/Cellar/maven/3.8.7/libexec
Java version: 17.0.3.1, vendor: Oracle Corporation, runtime: /Library/Java/JavaVirtualMachines/jdk-17.0.3.1.jdk/Contents/Home
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "13.1", arch: "aarch64", family: "mac"
Ответ Ондрея сработал отлично. Это действительно решает проблему. Несколько других вещей, которые нужно сделать, как описано в документации по инструментальной цепочке.
- Добавьте плагин maven-toolchains-plugin в свой проект POM.
- Настройте плагин maven-toolchains-plugin для использования определенного JDK в цепочке инструментов, как указано в файле toolchains.xml.
См. примеры конфигураций ниже:
набор инструментов.xml
<toolchains xmlns="http://maven.apache.org/TOOLCHAINS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/TOOLCHAINS/1.1.0 http://maven.apache.org/xsd/toolchains-1.1.0.xsd">
<!-- JDK toolchains -->
<toolchain>
<type>jdk</type>
<provides>
<version>1.8</version>
<vendor>sun</vendor>
</provides>
<configuration>
<jdkHome>/Library/Java/JavaVirtualMachines/jdk1.8.0_301.jdk/Contents/Home</jdkHome>
</configuration>
</toolchain>
<toolchain>
<type>jdk</type>
<provides>
<version>17</version>
<vendor>sun</vendor>
</provides>
<configuration>
<jdkHome>/Library/Java/JavaVirtualMachines/jdk-17.0.2.jdk/Contents/Home</jdkHome>
</configuration>
</toolchain>
<toolchain>
<type>jdk</type>
<provides>
<version>11</version>
<vendor>sun</vendor>
</provides>
<configuration>
<jdkHome>/Library/Java/JavaVirtualMachines/jdk-11.0.12.jdk/Contents/Home</jdkHome>
</configuration>
</toolchain>
</toolchains>
Как видно выше, это работает для машин с несколькими установленными версиями Java. Затем в POM проекта плагин maven-toolchains-plugin настраивается на использование одной из версий JDK, определенных как набор инструментов.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-toolchains-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>toolchain</goal>
</goals>
</execution>
</executions>
<configuration>
<toolchains>
<jdk>
<version>11</version>
<vendor>sun</vendor>
</jdk>
</toolchains>
</configuration>
</plugin>
- на терминале
vi ~/.bash_profile
- После этого вставьте указанный ниже путь в файл базового профиля и сохраните его с помощью команды vim.
wq!
export JAVA_HOME=/Users/mj/Tools/jdk1.8.0_211.jdk/Contents/Home
export M2_HOME=/Users/mj/Tools/apache-maven-3.8.1
запустить
source ~/.bash_profile
заставить его работать вечнопосле этого вы можете бежать
mvn -v
в вашем терминале, чтобы проверить
Maven home: /Users/mj/Tools/apache-maven-3.8.1
Java version: 1.8.0_211, vendor: Oracle Corporation,
runtime: /Users/mj/Tools/jdk1.8.0_211.jdk/Contents/Home/jre
Default locale: en_CN, platform encoding: UTF-8
OS name: "mac os x", version: "10.16", arch: "x86_64", family: "mac"
если вы хотите знать почему, читайте ниже
JAVA_HOME используется многими Java-приложениями для определения места установки Java Runtime Environment (JRE). M2_HOME будет использоваться по Maven, и снова он говорит программе , где найти установку Maven.
У меня не было успеха на Mac с просто настройкой JAVA_HOME
в консоли, но мне удалось с этим подходом
- Создайте файл.mavenrc в вашем домашнем каталоге (поэтому путь к файлу будет
~/.mavenrc
- В этот файл вставьте
export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)
Вам просто нужно добавить свою версию JAVA в файл mvn перед вызовом JAVA_HOME, например, моя версия JAVA в файле .bashrc — это Java-17, и я хочу запустить maven с Java-11:
в файле
/usr/share/maven/bin/mvn
: Я добавить :
JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
до звонка
JAVA_HOME
в сценарии
и тогда он отлично работает с Java-11 :)
Я не смог решить эту проблему с ответами выше, и я пробовал много вещей, чтобы решить эту проблему, и у меня это получилось. Я надеюсь, что кто-то вроде меня может решить проблему.
Я использую brew для установки java и maven. Для меня я хотел использовать java 1.8. Итак, я установил java 1.8, но все еще использую maven версии 17.0.2.
Решение:
установите java 1.8. Я обратился к этому веб-сайту, чтобы установить его: https://devqa.io/brew-install-java/
mvn --version
и запомните версию\
cat /usr/local/Cellar/maven/VERSION(for me 3.8.5)/bin/mvn
Тогда вы увидите
#!/bin/bash
JAVA_HOME="${JAVA_HOME:-/usr/local/opt/openjdk/libexec/openjdk.jdk/Contents/Home}" exec "/usr/local/Cellar/maven/3.8.5/libexec/bin/mvn" "$@"\
Проверьте этот каталог
ls /usr/local/opt
Вы увидите такие файлы, как openjdk, ,
измените каталог openjdk на [email protected][email protected][email protected] в файле mvn:
#!/bin/bash
JAVA_HOME="${JAVA_HOME:-/usr/local/opt/openjdk@8/libexec/openjdk.jdk/Contents/Home}" exec "/usr/local/Cellar/maven/3.8.5/libexec/bin/mvn" "$@"\
В Linux/Unix сценарий оболочки JAVA_HOME в 'mvn' переопределяется настройками в
$HOME/.mavenrc
Пожалуйста, где добавить переменные пути JAVA_HOME и MAVEN в Linux
Пользователи Mac, если вы установили maven из HomeBrew(Brew) или даже если вы установили его из другого места, если вы хотите изменить версию Java по умолчанию, используемую Maven, вы можете использовать следующие команды для изменения версии, которая мавен использует,
vim ~/.mavenrc
В появившемся графическом интерфейсе введите это и сохраните
JAVA_HOME="(put the Home path of your desired java version package)"
Чтобы проверить, изменен ли путь для maven, вы можете проверить, используя -
mvn -v
set JAVA_HOME=C:\Program Files\Java\jdk1.7.0_45\jre
Добавление приведенной выше строки кода в качестве первого оператора в
$MAVEN_HOME\bin\mvn.cmd
у меня сразу заработало в Windows 10.
Установка версии Java по умолчанию В вашей системе могут быть две разные версии Java. Чтобы установить один из них по умолчанию, используйте команду:
альтернативы sudo – конфигурация java
Система отобразит список различных версий Java. Если вам нравится значение по умолчанию, нажмите Enter.
Если вы хотите изменить его, введите номер нужной версии и нажмите Enter.
Для Java 11 вам нужно установить
<java.version>11</java.version>
и не
<java.version>1.11</java.version>
или вы также можете получить эту ошибку
Я использую jenv и столкнулся с ошибкой компиляции для "javax.xml.bind.annotation", поскольку mvn в терминале использовал openjdk 13
Maven home: /usr/local/Cellar/maven/3.6.3_1/libexec
Java version: 13.0.2, vendor: N/A, runtime: /usr/local/Cellar/openjdk/13.0.2+8_2/libexec/openjdk.jdk/Contents/Home
Для меня это сработало после запуска jenv enable-plugin maven, как предлагается здесь /questions/445452/kak-ustanovit-konkretnuyu-versiyu-java-dlya-maven/50478470#50478470
Я использовал базовую идею от @Jonathan. Я установил окна с помощью: set JAVA_HOME=C:\Program Files\java\AdoptOpenJDK-11.0.8+10 call mvn clean package -DskipTests
Я использовал /questions/445452/kak-ustanovit-konkretnuyu-versiyu-java-dlya-maven/445472#445472 и создал следующие функции для использования с Powershell:
function J08 { $env:JAVA_HOME = 'C:\Program Files\Java\jdk1.8.0_161'}
function J09 { $env:JAVA_HOME = 'C:\Program Files\Java\jdk-9'}
function J11 { $env:JAVA_HOME = 'C:\Program Files\Java\jdk-11.0.10'}
function J15 { $env:JAVA_HOME = 'C:\Program Files\Java\jdk-15.0.2'}
function J16 { $env:JAVA_HOME = 'C:\Program Files\Java\jdk-16.0.1'}
function J17 { $env:JAVA_HOME = 'C:\Program Files\Java\jdk-17'}
function J18 { $env:JAVA_HOME = 'C:\Program Files\Java\jdk-18.0.2'}
function J19 { $env:JAVA_HOME = 'C:\Program Files\Java\jdk-19'}
Эти функции должны быть помещены в файлC:\Program Files\PowerShell\7\profile.ps1
(или любой другой профиль PowerShell) и вызываться перед использованием. например, если вы хотите использовать maven с Java 8, вы должны сначала вызватьJ08
, тогда позвониmvn ...
.
Я нашел ответ на инструментальную цепочку таким сложным и предпочел этот способ.
Также вы можете установить две версии maven и отредактировать одну из них, отредактировав здесь:
МВН (без окон)/mvn.bat/mvn.cmd(окна)
заменив ваш внешний вид%java_home% на ваш желаемый путь Java. Затем просто выполните Maven с этого измененного пути