На моїй машині встановлено дві версії Java: (1.6 та 1.7 встановлені мною вручну). Мені вони обоє потрібні для різних проектів. Але для Maven мені потрібно 1,7, тепер мій Maven використовує 1,6 версії java, як я можу налаштувати Maven на 1.7?
На моїй машині встановлено дві версії Java: (1.6 та 1.7 встановлені мною вручну). Мені вони обоє потрібні для різних проектів. Але для Maven мені потрібно 1,7, тепер мій Maven використовує 1,6 версії java, як я можу налаштувати Maven на 1.7?
Відповіді:
Maven використовує JAVA_HOME
параметр, щоб знайти версію Java, яку він повинен запускати. З вашого коментаря я бачу, що ви не можете змінити це в конфігурації.
JAVA_HOME
параметр безпосередньо перед запуском maven (і змінити його згодом, якщо потрібно).mvn
(не віконний) / 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's ) 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
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 shell, і він добре працював там. просто використовуйте команду 'bash' для переходу на bash shell.
Ви можете налаштувати компіляцію джерел , використовуючи різні 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>
Щоб уникнути будь-якого впливу на ваш проект та на ваші змінні середовища, ви можете налаштувати плагін Maven Compiler лише до 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
Не змінюючи змінні середовища, ви можете керувати версією Java на основі рівня проекту, використовуючи плагін Maven Compiler.
Спосіб 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>
У 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 (без вікон) /mvn.bat/mvn.cmd (windows)
заміни вашого% java_home% появи на потрібний шлях до Java. Тоді просто виконайте maven з цього модифікованого шляху