На моей машине установлены две версии Java: (1.6 и 1.7, установленные мной вручную). Мне они оба нужны для разных проектов. Но для Maven мне нужен 1.7, теперь мой Maven использует версию java 1,6, как мне настроить Maven на использование 1.7?
На моей машине установлены две версии Java: (1.6 и 1.7, установленные мной вручную). Мне они оба нужны для разных проектов. Но для Maven мне нужен 1.7, теперь мой Maven использует версию java 1,6, как мне настроить Maven на использование 1.7?
Ответы:
Maven использует JAVA_HOME
параметр, чтобы найти версию Java, которую предполагается запустить. Я вижу из вашего комментария, что вы не можете изменить это в конфигурации.
JAVA_HOME
параметр непосредственно перед запуском maven (и при необходимости изменить его обратно).mvn
(не Windows) / mvn.bat
/ mvn.cmd
(Windows) и явно указать свою версию Java.JAVA_HOME
свою локальную оболочку, не меняя конфигурацию своей машины вообще (как только вы закроете эту оболочку, изменения исчезнут). Вы даже можете изменить его для одной команды:JAVA_HOME=/path/to/jdk17/ mvn build
В POM вы можете установить свойства компилятора, например, для 1.8:
<project>
...
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
...
</project>
У нас есть большая кодовая база, большая часть которой находится на 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, используемой в проекте.
mvn2
и mvn3
определились, а именование становится немного забавным, когда в игру вступают и версии Java ...: D
alias mvn8 = "JAVA_HOME=`/usr/libexec/java_home -v 1.8` && mvn
&&
до mvn
. mvn не видит значение JAVA_HOME с &&
.
На окнах
Если вы не хотите менять свою 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 ====
in 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
mvn.bat
переименован в mvn.cmd
.
Я только недавно, после семи долгих лет с 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 = / 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.
Вы можете настроить компиляцию источников, используя разные 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>
Не изменяя переменные среды, вы можете управлять версией 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>
Вы можете настроить 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 на своем компьютере для любого проекта без каких-либо проблем.
На Mac (если у вас установлена правильная версия)
JAVA_HOME=`/usr/libexec/java_home -v 1.8` mvn clean install -DskipTests
В Windows я просто добавляю несколько командных файлов для разных версий JDK в папку Maven bin следующим образом:
mvn11.cmd
@echo off
setlocal
set "JAVA_HOME=path\to\jdk11"
set "path=%JAVA_HOME%;%path%"
mvn %*
тогда вы можете использовать mvn11
для запуска Maven в указанном JDK.
В Linux / Unix сценарий оболочки JAVA_HOME в 'mvn' переопределяется настройками в
$HOME/.mavenrc
Пожалуйста, где добавить переменные пути JAVA_HOME и MAVEN в Linux
У меня не было успеха на Mac с просто настройки JAVA_HOME
в консоли, но я был успешным с этим подходом
~/.mavenrc
export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)
Также вы можете установить две версии maven и отредактировать одну из них, отредактировав здесь:
МВН (не окно) /mvn.bat/mvn.cmd (окна)
заменив ваш внешний вид% java_home% на ваш желаемый путь Java. Затем просто выполните Maven с этого измененного пути