특정 Java 버전을 Maven으로 설정하는 방법


165

내 컴퓨터에는 두 개의 Java 버전이 설치되어 있습니다 (1.6 및 1.7은 수동으로 설치). 다른 프로젝트에는 둘 다 필요합니다. 그러나 Maven의 경우 1.7이 필요합니다. 이제 Maven은 1,6 Java 버전을 사용합니다. 어떻게 Maven을 1.7로 사용하도록 설정할 수 있습니까?


내 컴퓨터의 구성을 만질 수 없기 때문에 Java 1.7로 JAVA_HOME을 내보낼 수 없습니다. Java의 기본 버전은 1.6이어야합니다.
and Pat

Maven은 JAVA_HOME을 사용하므로 JAVA_HOME 값을 변경하지 않고 원하는 것을 할 수 있다고 생각하지 마십시오.
Zyga

1
IDE 또는 명령 행을 사용하고 있습니까? 당신은 * nix 또는 창에 있습니까?
xwoker

1
이 답변은 당신이 원하는 것을 다루고 있습니까? stackoverflow.com/a/4724062/1570834
DB5

예 유용하지만 프로젝트의 POM에 chnges을 할 수 없습니다, 그럼에도 불구하고 물건은 동일하고 대답은 정확
andPat

답변:


140

Maven은 JAVA_HOME매개 변수를 사용하여 실행할 Java 버전을 찾습니다. 귀하의 의견으로는 구성에서 변경할 수 없다는 것을 알았습니다.

  • JAVA_HOMEmaven을 시작하기 직전에 매개 변수 를 설정할 수 있습니다 (필요한 경우 나중에 다시 변경할 수 있음).
  • 당신은 또한 당신에 갈 수 mvn/ (비 창) mvn.bat/ mvn.cmd(창) 명시 적으로 거기 자바 버전을 설정합니다.

29
@andPat : 그래? JAVA_HOME컴퓨터 구성을 전혀 변경하지 않고 로컬 셸에서 설정할 수 있습니다 (쉘을 닫 자마자 변경 사항이 사라짐). 단일 명령으로 변경할 수도 있습니다.JAVA_HOME=/path/to/jdk17/ mvn build
Joachim Sauer

@JoachimSauer : 예, 그러나 Windows 고유의 mvn.bat에 대한 참조도 만들었습니다.
DanielBarbarian

Mac에서는 JAVA_HOME을 사용하여 .mavenrc 파일을 만들 수 있습니다
Ronan Quillevere

늙었지만 내 2 센트를 던지고 Java 7 응용 프로그램에서 호출하는 Java 8 서비스를 개발 중입니다. 빌드 할 때 지속적으로 전환하지 않으려면 Windows에서 MVN_JAVA_HOME 환경 변수를 만든 다음 mvn 및 mvn.cmd 내부의 모든 JAVA_HOME을 MVN_JAVA_HOME으로 바꿉니다.
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
crowne입니다.

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"

이를 통해 프로젝트에 사용 된 JDK 버전에 관계없이 개발 시스템의 명령 줄에서 Maven을 실행할 수 있습니다.


2
당신은 당신이 이미 가지고있는 경우에 다양한 프로젝트에 대해 2 단계와 3을 받는다는 필요하지 않는 mvn2mvn3정의 및 Java 버전도 플레이로 올 때 이름은 ... 비트 펑키를 가져옵니다 D
토미 슬라브 Nakic-Alfirevic

3
Mac을 사용하는 경우 JDK에는 java_home 명령이 제공되므로 하드 코딩 경로를 피할 수 있습니다. 예 :alias mvn8 = "JAVA_HOME=`/usr/libexec/java_home -v 1.8` && mvn
ptkvsk

5
(ubuntu + bash)에서 &&before 를 생략 해야 mvn합니다. mvn에는 JAVA_HOME의 값이 표시되지 않습니다 &&.
Fabien

알고있는 @Fabien; 나는
Jonathan Landrum

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

java_home 도구를 사용하여 ~/.mavenrc파일을 작성 하고 재정의 할 수 있습니다.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 exluded jre 하위 폴더를 설정하도록 설정했습니다.
nanosoft

32

내 두 센트를 추가하고 명시 적으로 솔루션을 제공합니다.

내 Windows 시스템에 설치 둘의 JDK가 - JDK 1.5JDK 1.6.

내 기본값 (및 Windows 시스템 환경 변수 JAVA_HOME로 설정 ) 이로 설정되어 JDK 1.5있습니다.

그러나을 사용하여 빌드 해야하는 maven 프로젝트가 있습니다 (예 : JBehave Tutorial 's Etsy.com ) 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에서 7 년 동안 근무한 후 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 실행에 관계없이 Maven이 프로젝트를 빌드하는 데 사용할 수있는 다른 JDK를 정의 할 수 있습니다. IDE의 프로젝트 레벨에서 JDK를 정의 할 때와 비슷합니다.


2
가장 좋은 대답! 감사. 이것은 우리가 Maven과 프로젝트를 컴파일 할 때 두 가지 다른 자바 런타임 / 프레임 워크로 실행하려는 명확한 상황을 설명합니다.
Soundararajan

5

문제에 대한 하나의 간단한 해결책-

JAVA_HOME = / usr / lib / jvm / java-6-sun / mvn 새로 설치

Mac에서는 다음과 같습니다.

JAVA_HOME = / 라이브러리 /Java/JavaVirtualMachines/jdk1.7.0_21.jdk/Contents/Home/ mvn 새로 설치

추신 : 내가 찾은 특별한 경우는 위의 명령이 '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>

4

프로젝트 및 환경 변수에 대한 영향을 피하기 위해 소스 및 대상 Java 버전을 지정하여 프로젝트의 POM에 대해서만 Maven 컴파일러 플러그인을 구성 할 수 있습니다

  <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

아래 지침에 따라 Java 버전을 사용하도록 Maven을 설정할 수 있습니다.

머신 링크에 jenv 설치

명령 행에서 다음 명령을 실행하여 시스템에 설치된 사용 가능한 Java 버전을 확인하십시오.

jenv 버전

다음 명령을 사용하여 글로벌 Java 버전을 지정할 수 있습니다.

jenv 글로벌 오라클 64-1.6.0.39

명령 행의 디렉토리에서 다음 명령을 사용하여 모든 디렉토리 (프로젝트)의 로컬 Java 버전을 지정할 수 있습니다.

jenv 로컬 oracle64-1.7.0.11

pom.xml에 올바른 Java 버전을 추가하십시오.

커맨드 라인에서 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

환경 변수를 변경하지 않고 Maven Compiler Plugin을 사용하여 프로젝트 레벨을 기반으로 Java 버전을 관리 할 수 ​​있습니다.

방법 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지정된 JDK에서 Maven을 실행 하는 데 사용할 수 있습니다 .



1

JAVA_HOME콘솔에서 설정하면 Mac에서 성공하지 못했지만 이 방법으로 성공했습니다.

  • 홈 디렉토리에서 .mavenrc 파일을 만듭니다 (파일 경로는 다음과 같습니다. ~/.mavenrc
  • 해당 파일 붙여 넣기 export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)

0

또한 두 가지 버전의 maven을 설치하고 다음 중 하나 를 편집하여 편집 할 수 있습니다.

mvn (비 창문) /mvn.bat/mvn.cmd (창)

% java_home % 모양을 Java 원하는 경로로 바꿉니다. 그런 다음 수정 된 경로에서 maven을 실행하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.