Як встановити конкретну версію Java для Maven


162

На моїй машині встановлено дві версії Java: (1.6 та 1.7 встановлені мною вручну). Мені вони обоє потрібні для різних проектів. Але для Maven мені потрібно 1,7, тепер мій Maven використовує 1,6 версії java, як я можу налаштувати Maven на 1.7?


Я не можу експортувати JAVA_HOME з java 1.7, оскільки не можу торкнутися конфігурації своєї машини, версія за замовчуванням Java повинна бути 1.6.
andPat

Maven використовує JAVA_HOME, тому не думайте, що ви хочете зробити, можливо, не змінюючи значення JAVA_HOME.
Зига

1
Використовуєте IDE або командний рядок? Ви на * nix або windows?
xwoker

1
Чи відповідає ця відповідь того, що ви хочете? stackoverflow.com/a/4724062/1570834
DB5

Так, це корисно, але я не можу внести зміни до пом. Проекту, тим не менш, матеріал той самий, а відповідь правильна
іPat

Відповіді:


138

Maven використовує JAVA_HOMEпараметр, щоб знайти версію Java, яку він повинен запускати. З вашого коментаря я бачу, що ви не можете змінити це в конфігурації.

  • Ви можете встановити JAVA_HOMEпараметр безпосередньо перед запуском maven (і змінити його згодом, якщо потрібно).
  • Ви також можете зайти у свій mvn(не віконний) / mvn.bat/ mvn.cmd(windows) і встановити там свою версію Java.

29
@andPat: так? Ви можете встановити JAVA_HOMEсвою локальну оболонку, не змінюючи конфігурації вашої машини взагалі (як тільки ви закриєте цю оболонку, зміни не будуть). Ви навіть можете змінити його для однієї команди:JAVA_HOME=/path/to/jdk17/ mvn build
Йоахім Зауер

@JoachimSauer: Так, але я також посилався на mvn.bat, який є специфічним для Windows.
DanielBarbarian

На mac ви можете створити .mavenrc файл із JAVA_HOME всередині
Ronan Quillevere

Старий, але кидаючи у мене 2 центи. Я працюю над службою Java 8, яку викликає програма Java 7. Щоб уникнути необхідності постійно перемикатися під час будівництва, я (на windows) створив змінну середовища MVN_JAVA_HOME, а потім замінював кожне виникнення JAVA_HOME на MVN_JAVA_HOME всередині mvn та mvn.cmd.
ryanlutgen

74

У POM можна встановити властивості компілятора, наприклад для 1.8:

<project>
...
 <properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>
...
</project>

9
Станом на версію 3.7.0 для компілятора-плагіна, значення за замовчуванням для джерела та цілі, якщо їх не вказано, становить 1,5
крона

58

Додавання рішення для людей із встановленими кількома версіями 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, яка використовується в проекті.


2
Якщо вам не потрібні Maven 2 і 3 для різних проектів, тоді ви вже маєте mvn2та mvn3визначились, і називання стає делікатним, коли версії Java також вступають у гру ...: D
Томіслав Накіч-Алфіревич

3
Якщо ви використовуєте Mac, ваш JDK поставляється з командою java_home, щоб ви могли уникнути жорсткого кодування шляхів, наприкладalias mvn8 = "JAVA_HOME=`/usr/libexec/java_home -v 1.8` && mvn
ptkvsk

5
Увімкнути (ubuntu + bash), ви повинні опустити &&попереднє mvn. mvn не бачить значення JAVA_HOME з &&.
Фаб'єн

@Fabien добре знати; Я використовую ZSH і не знав про відмінності від Баша
Джонатан

47

На вікнах

Якщо ви не хочете змінювати свою 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


Я встановив його, щоб встановити JAVA_HOME = C: \ Program Files \ Java \ jdk1.7.0_45 виключено підпапку jre.
nanosoft

32

Додаю два мої центи і явно надаю рішення.

У мене на моєму комп'ютері 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

4
У maven 3.5 mvn.batперейменований на mvn.cmd.
CKM

30

Я нещодавно, після семи довгих років з 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.


2
Найкраща відповідь,! Дякую. Це пояснює чітку ситуацію, коли ми хочемо запустити Maven і проект, що знаходиться під компіляцією, з двома різними режимами / рамкою Java.
Soundararajan

5

Одне просте рішення проблеми -

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.


5

Ви можете налаштувати компіляцію джерел , використовуючи різні 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>

4

Щоб уникнути будь-якого впливу на ваш проект та на ваші змінні середовища, ви можете налаштувати плагін 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>

4

Ви можете налаштувати 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 на вашій машині під будь-який проект без проблем.


1
подобається цей варіант. jenv - це як virtualenv для пітона
Jesse Zhuang

4

На Mac, (якщо ви встановили правильну версію)

JAVA_HOME=`/usr/libexec/java_home -v 1.8` mvn clean install -DskipTests


4

Не змінюючи змінні середовища, ви можете керувати версією 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>

2

У Windows я просто додаю декілька пакетних файлів для різних версій JDK до папки Maven bin, як це:

mvn11.cmd

@echo off
setlocal
set "JAVA_HOME=path\to\jdk11"
set "path=%JAVA_HOME%;%path%"
mvn %*

тоді ви можете використовувати mvn11для запуску Maven у вказаному JDK.



1

У мене не було успіху на mac, просто встановивши JAVA_HOMEв консолі, але я мав успіх із таким підходом

  • Створіть .mavenrc файл у своєму домашньому каталозі (таким чином, файл буде шлях ~/.mavenrc
  • У цей файл вставити export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)

0

Також у вас можуть бути встановлені дві версії Maven і редагувати одну з них, редагуючи тут:

mvn (без вікон) /mvn.bat/mvn.cmd (windows)

заміни вашого% java_home% появи на потрібний шлях до Java. Тоді просто виконайте maven з цього модифікованого шляху

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.