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

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

30 ответов

Решение

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

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

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

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

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

Я только недавно, после семи долгих лет с 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 переменная внутри системных переменных.

Отредактируйте свой 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 ==== в 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

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

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

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.

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

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

Я использую Mac, и ни один из приведенных выше ответов мне не помог. Я обнаружил, что maven загружает собственный JAVA_HOME из пути, указанного в: ~/.mavenrc

Я изменил содержимое файла на:

      JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home

Для Linux это будет выглядеть примерно так:

      export JAVA_HOME=/usr/lib/jvm/java-8-oracle/jre

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

В Windows я просто добавляю несколько командных файлов для разных версий JDK в папку Maven bin следующим образом:

mvn11.cmd

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

тогда вы можете использовать mvn11 запустить Maven в указанном JDK.

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

Недавно установил Java10, чтобы узнать, что нового и интересного в нем. Как только я это сделал и попробовал запустить существующие проекты, использующие java8. К моему удивлению, maven начал использовать java10 в качестве версии java по умолчанию, хотя мой JAVA_HOME настроен на использование java8 - / usr / libexec / java_home -v 1.8

Учитывая, что моя установка была произведена с использованием brew - Brew - это просто менеджер пакетов для Mac OS, мой M2_HOME был настроен автоматически. Обычно это /usr/local/Cellar/maven/3.5.4.

Обладая этими новыми знаниями, я запускаю nano /usr/local/Cellar/maven/3.5.4/bin/mvn.

#! / bin / bashJAVA_HOME="${JAVA_HOME:-$(/usr / libexec / java_home)}" exec "/usr/local/Cellar/maven/3.5.4/libexec/bin/mvn" "$@"

Важный бит

"${JAVA_HOME:-$(/usr / libexec / java_home)}"

Чтобы решить эту проблему, вам нужно будет указать версию Java, которую maven должен использовать по умолчанию. Так что в моем случае мне понадобился java8.

Обновите /usr/local/Cellar/maven/3.5.4/bin/mvnfile следующим образом

#! / bin / bashJAVA_HOME="${JAVA_HOME:-$(/usr / libexec / java_home -v 1.8)}" exec "/usr/local/Cellar/maven/3.5.4/libexec/bin/mvn" "$@ "

Я использую чип MAC Mini - M1, после установки maven через brew install maven я заметил, что он использует java 19, но я скорее хотел использовать версию java 17, которую я загрузил на свою машину. Не повезло с конкретными инструкциями по сбросу версии mvn java по умолчанию. Вот шаги, которые вы можете выполнить.

  1. mvn --version# это даст, где установлен maven в моем случае Maven home:/opt/homebrew/Cellar/maven/3.8.7/libexec
  2. затем перейдите к/opt/homebrew/Cellar/maven/3.8.7/binпапка
  3. отредактируйте файл mvn, я использовалvi mvn
  4. ниже я отредактировал местоположение jdk, чтобы указать, где у меня есть java 17 jdk
      #!/bin/bash
JAVA_HOME="${JAVA_HOME:-/Library/Java/JavaVirtualMachines/jdk-17.0.3.1.jdk/Contents/Home}" exec "/opt/homebrew/Cellar/maven/3.8.7/libexec/bin/mvn"  "$@"
  1. сохранить файл mvn после редактирования
  2. mvn -vтеперь будет отображаться версия Java по умолчанию 17
      Apache Maven 3.8.7 (b89d5959fcde851dcb1c8946a785a163f14e1e29)
Maven home: /opt/homebrew/Cellar/maven/3.8.7/libexec
Java version: 17.0.3.1, vendor: Oracle Corporation, runtime: /Library/Java/JavaVirtualMachines/jdk-17.0.3.1.jdk/Contents/Home
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "13.1", arch: "aarch64", family: "mac"

Ответ Ондрея сработал отлично. Это действительно решает проблему. Несколько других вещей, которые нужно сделать, как описано в документации по инструментальной цепочке.

  1. Добавьте плагин maven-toolchains-plugin в свой проект POM.
  2. Настройте плагин maven-toolchains-plugin для использования определенного JDK в цепочке инструментов, как указано в файле toolchains.xml.

См. примеры конфигураций ниже:

набор инструментов.xml

      <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>/Library/Java/JavaVirtualMachines/jdk1.8.0_301.jdk/Contents/Home</jdkHome>
    </configuration>
  </toolchain>
  <toolchain>
    <type>jdk</type>
    <provides>
      <version>17</version>
      <vendor>sun</vendor>
    </provides>
    <configuration>
      <jdkHome>/Library/Java/JavaVirtualMachines/jdk-17.0.2.jdk/Contents/Home</jdkHome>
    </configuration>
  </toolchain>
  <toolchain>
    <type>jdk</type>
    <provides>
      <version>11</version>
      <vendor>sun</vendor>
    </provides>
    <configuration>
      <jdkHome>/Library/Java/JavaVirtualMachines/jdk-11.0.12.jdk/Contents/Home</jdkHome>
    </configuration>
  </toolchain>
</toolchains>

Как видно выше, это работает для машин с несколькими установленными версиями Java. Затем в POM проекта плагин maven-toolchains-plugin настраивается на использование одной из версий JDK, определенных как набор инструментов.

      <plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-toolchains-plugin</artifactId>
  <executions>
    <execution>
      <goals>
        <goal>toolchain</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <toolchains>
      <jdk>
        <version>11</version>
        <vendor>sun</vendor>
      </jdk>
    </toolchains>
  </configuration>
</plugin>
  1. на терминале vi ~/.bash_profile
  2. После этого вставьте указанный ниже путь в файл базового профиля и сохраните его с помощью команды vim. wq!
      export JAVA_HOME=/Users/mj/Tools/jdk1.8.0_211.jdk/Contents/Home
export M2_HOME=/Users/mj/Tools/apache-maven-3.8.1
  1. запустить source ~/.bash_profile заставить его работать вечно

  2. после этого вы можете бежать mvn -v в вашем терминале, чтобы проверить

      Maven home: /Users/mj/Tools/apache-maven-3.8.1
Java version: 1.8.0_211, vendor: Oracle Corporation, 
runtime: /Users/mj/Tools/jdk1.8.0_211.jdk/Contents/Home/jre
Default locale: en_CN, platform encoding: UTF-8
OS name: "mac os x", version: "10.16", arch: "x86_64", family: "mac"

если вы хотите знать почему, читайте ниже

JAVA_HOME используется многими Java-приложениями для определения места установки Java Runtime Environment (JRE). M2_HOME будет использоваться по Maven, и снова он говорит программе , где найти установку Maven.

У меня не было успеха на Mac с просто настройкой JAVA_HOME в консоли, но мне удалось с этим подходом

  • Создайте файл.mavenrc в вашем домашнем каталоге (поэтому путь к файлу будет ~/.mavenrc
  • В этот файл вставьте export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)

Вам просто нужно добавить свою версию JAVA в файл mvn перед вызовом JAVA_HOME, например, моя версия JAVA в файле .bashrc — это Java-17, и я хочу запустить maven с Java-11:

в файле /usr/share/maven/bin/mvn: Я добавить :

      JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64

до звонка JAVA_HOMEв сценарии

и тогда он отлично работает с Java-11 :)

Я не смог решить эту проблему с ответами выше, и я пробовал много вещей, чтобы решить эту проблему, и у меня это получилось. Я надеюсь, что кто-то вроде меня может решить проблему.

Я использую brew для установки java и maven. Для меня я хотел использовать java 1.8. Итак, я установил java 1.8, но все еще использую maven версии 17.0.2.

Решение:
установите java 1.8. Я обратился к этому веб-сайту, чтобы установить его: https://devqa.io/brew-install-java/

mvn --versionи запомните версию\

      cat /usr/local/Cellar/maven/VERSION(for me 3.8.5)/bin/mvn

Тогда вы увидите

      #!/bin/bash
JAVA_HOME="${JAVA_HOME:-/usr/local/opt/openjdk/libexec/openjdk.jdk/Contents/Home}" exec "/usr/local/Cellar/maven/3.8.5/libexec/bin/mvn"  "$@"\

Проверьте этот каталог

      ls /usr/local/opt

Вы увидите такие файлы, как openjdk, ,

измените каталог openjdk на [email protected][email protected][email protected] в файле mvn:

      #!/bin/bash
JAVA_HOME="${JAVA_HOME:-/usr/local/opt/openjdk@8/libexec/openjdk.jdk/Contents/Home}" exec "/usr/local/Cellar/maven/3.8.5/libexec/bin/mvn"  "$@"\

В Linux/Unix сценарий оболочки JAVA_HOME в 'mvn' переопределяется настройками в

$HOME/.mavenrc

Пожалуйста, где добавить переменные пути JAVA_HOME и MAVEN в Linux

Пользователи Mac, если вы установили maven из HomeBrew(Brew) или даже если вы установили его из другого места, если вы хотите изменить версию Java по умолчанию, используемую Maven, вы можете использовать следующие команды для изменения версии, которая мавен использует,

      vim ~/.mavenrc

В появившемся графическом интерфейсе введите это и сохраните

      JAVA_HOME="(put the Home path of your desired java version package)"

Чтобы проверить, изменен ли путь для maven, вы можете проверить, используя -

      mvn -v
      set JAVA_HOME=C:\Program Files\Java\jdk1.7.0_45\jre

Добавление приведенной выше строки кода в качестве первого оператора в $MAVEN_HOME\bin\mvn.cmdу меня сразу заработало в Windows 10.

Установка версии Java по умолчанию В вашей системе могут быть две разные версии Java. Чтобы установить один из них по умолчанию, используйте команду:

альтернативы sudo – конфигурация java

Система отобразит список различных версий Java. Если вам нравится значение по умолчанию, нажмите Enter.

Если вы хотите изменить его, введите номер нужной версии и нажмите Enter.

Для Java 11 вам нужно установить

<java.version>11</java.version>

и не

<java.version>1.11</java.version>

или вы также можете получить эту ошибку

Я использую jenv и столкнулся с ошибкой компиляции для "javax.xml.bind.annotation", поскольку mvn в терминале использовал openjdk 13

      Maven home: /usr/local/Cellar/maven/3.6.3_1/libexec
Java version: 13.0.2, vendor: N/A, runtime: /usr/local/Cellar/openjdk/13.0.2+8_2/libexec/openjdk.jdk/Contents/Home

Для меня это сработало после запуска jenv enable-plugin maven, как предлагается здесь /questions/445452/kak-ustanovit-konkretnuyu-versiyu-java-dlya-maven/50478470#50478470

Я использовал базовую идею от @Jonathan. Я установил окна с помощью: set JAVA_HOME=C:\Program Files\java\AdoptOpenJDK-11.0.8+10 call mvn clean package -DskipTests

Я использовал /questions/445452/kak-ustanovit-konkretnuyu-versiyu-java-dlya-maven/445472#445472 и создал следующие функции для использования с Powershell:

      function J08 { $env:JAVA_HOME = 'C:\Program Files\Java\jdk1.8.0_161'}
function J09 { $env:JAVA_HOME = 'C:\Program Files\Java\jdk-9'}
function J11 { $env:JAVA_HOME = 'C:\Program Files\Java\jdk-11.0.10'}
function J15 { $env:JAVA_HOME = 'C:\Program Files\Java\jdk-15.0.2'}
function J16 { $env:JAVA_HOME = 'C:\Program Files\Java\jdk-16.0.1'}
function J17 { $env:JAVA_HOME = 'C:\Program Files\Java\jdk-17'}
function J18 { $env:JAVA_HOME = 'C:\Program Files\Java\jdk-18.0.2'}
function J19 { $env:JAVA_HOME = 'C:\Program Files\Java\jdk-19'}

Эти функции должны быть помещены в файлC:\Program Files\PowerShell\7\profile.ps1(или любой другой профиль PowerShell) и вызываться перед использованием. например, если вы хотите использовать maven с Java 8, вы должны сначала вызватьJ08, тогда позвониmvn ....

Я нашел ответ на инструментальную цепочку таким сложным и предпочел этот способ.

Также вы можете установить две версии maven и отредактировать одну из них, отредактировав здесь:

МВН (без окон)/mvn.bat/mvn.cmd(окна)

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

Другие вопросы по тегам