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

166

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

andPat
источник
Я не могу экспортировать 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
Да, это полезно, но я не могу внести изменения в проект, но, тем не менее, все то же самое, и ответ правильный
andPat 29.10.13

Ответы:

142

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

  • Вы можете установить JAVA_HOMEпараметр непосредственно перед запуском maven (и при необходимости изменить его обратно).
  • Вы также можете зайти в свой mvn(не Windows) / mvn.bat/ mvn.cmd(Windows) и явно указать свою версию Java.
DanielBarbarian
источник
29
@andPat: так? Вы можете установить JAVA_HOMEсвою локальную оболочку, не меняя конфигурацию своей машины вообще (как только вы закроете эту оболочку, изменения исчезнут). Вы даже можете изменить его для одной команды:JAVA_HOME=/path/to/jdk17/ mvn build
Йоахим Зауэр
@JoachimSauer: Да, но я также упомянул mvn.bat, специфичный для Windows.
ДаниэльБарбарян
На Mac вы можете создать файл .mavenrc с JAVA_HOME внутри
Ronan Quillevere
Старый, но кидаю в меня 2цента. Я работаю над сервисом Java 8, который вызывается приложением Java 7. Чтобы избежать необходимости постоянно переключаться при сборке, я (на окнах) создал переменную среды MVN_JAVA_HOME, а затем заменял каждое вхождение JAVA_HOME на MVN_JAVA_HOME внутри mvn и mvn.cmd.
ryanlutgen
75

В POM вы можете установить свойства компилятора, например, для 1.8:

<project>
...
 <properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>
...
</project>
Эдвард Росс
источник
10
По компилятору плагиных версии 3.7.0, значение по умолчанию для источника и целей , если остается неопределенными 1,5
Краун
59

Добавление решения для людей с несколькими установленными версиями 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
жесткого кодирования
5
На (Ubuntu + Bash), вы должны опустить &&до mvn. mvn не видит значение JAVA_HOME с &&.
Фабьен
@Fabien хорошо знать; Я использую ZSH и не знал о различиях Bash
Джонатан
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 ), используя 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
Джонатан
источник
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 runtime / framework.
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, и там она работала нормально. просто используйте команду 'bash', чтобы переключиться на оболочку bash.

Панкай
источник
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>
Руслан
источник
5

Не изменяя переменные среды, вы можете управлять версией 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>
Saveendra Ekanayake
источник
4

Чтобы избежать какого-либо влияния на ваш проект и переменные среды, вы можете настроить плагин компилятора 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>
Тонино
источник
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 на своем компьютере для любого проекта без каких-либо проблем.

Ranuka
источник
1
нравится этот вариант. Дженв как виртуален для питона
Джесси Чжуан
4

На Mac (если у вас установлена ​​правильная версия)

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

user2475448
источник
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.bat/mvn.cmd (окна)

заменив ваш внешний вид% java_home% на ваш желаемый путь Java. Затем просто выполните Maven с этого измененного пути

Альберто Перес
источник