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


166

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

Да, это полезно, но я не могу внести изменения в проект, но, тем не менее, все то же самое, и ответ правильный
andPat 29.10.13

Ответы:


142

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

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

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>

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


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

4

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

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


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 с этого измененного пути

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.