Maven을 통한 Java 7 코드 컴파일


155

내 pom 파일 목록

<project>
  <build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.0</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.12.4</version>
            </plugin>
        </plugins>
    </pluginManagement>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
    </plugins>
  ...

그러나 mvn clean install, 나는

[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] Failure executing javac, but could not parse the error:
javac: invalid target release: 1.7
Usage: javac <options> <source files>

/usr/bin/java -version입니다 ( which java여기 포인트)

java version "1.7.0_10"
Java(TM) SE Runtime Environment (build 1.7.0_10-b18)
Java HotSpot(TM) 64-Bit Server VM (build 23.6-b04, mixed mode)

javac 또한 올바른 Java 버전을 가리 킵니다.

/usr/bin/javac -> /Library/Java/JavaVirtualMachines/jdk1.7.0_10.jdk/Contents/Home/bin/javac

이 기계에서는 zsh( echo $0returns -zsh)를 사용하고 있습니다.

내에서는 다음 .zshrc을 정의했습니다.

 33 # HOME
 34 JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_10.jdk/Contents/Home
 35 SCALA_HOME=/Library/Scala/current
 36 FORGE_HOME=~/tools/forge/
 37 
 38 # PATH
 39 PATH="/Library/Frameworks/Python.framework/Versions/3.2/bin:${PATH}"
 40 PATH=${PATH}:${JAVA_HOME}/bin
 41 PATH=${PATH}:/bin/
 42 PATH=${PATH}:/sbin/
 43 PATH=${PATH}:/usr/bin/
 44 PATH=${PATH}:/usr/sbin/
 45 PATH=${PATH}:/opt/local/bin/
 46 PATH=${PATH}:/opt/local/sbin/
 47 PATH=${PATH}:/usr/local/git/bin
 48 PATH=${PATH}:/usr/local/git/sbin
 49 PATH=${PATH}:/Applications/Xcode.app/Contents/Developer/usr/bin
 50 PATH=${PATH}:${SCALA_HOME}/bin
 51 PATH=${PATH}:${FORGE_HOME}/bin
 52 
 53 export PATH

내가 실행할 때 mvn clean install --debug실제로 Java 6을 사용한다는 것을 알았습니다.

  1 Apache Maven 3.0.3 (r1075438; 2011-02-28 11:31:09-0600)
  2 Maven home: /usr/share/maven
  3 Java version: 1.6.0_35, vendor: Apple Inc.
  4 Java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

어디에서 정의 할 수 있습니까? .zshrc를 여러 번 소스 (d)했습니다.


2
PATH는 /usr/bin디렉토리 목록에서 첫 번째 가 아닙니다 . javac -version디렉토리를 지정하지 않고 시도하십시오 .
피터 로리

@PeterLawrey, 내가 얻을javac 1.7.0_10
제임스 Raitsev

2
무엇을 echo $JAVA_HOME말합니까?
Andrew Logvinov

2
JAVA_HOME 변수는 어떻습니까? mvn은 JAVA_HOME을 사용합니다. 또한 커맨드 라인이나 IDE 내부에서 빌드하고 있습니까?
Lucas

8
로 Maven을 실행하면 실행 --debug하는 데 사용하는 정확한 명령 줄 javac(다른 많은 것들과 함께) 을 알려줍니다 . 그것은 무엇을 말하는가?
Emil 앉아

답변:


153

mvnmaven 설치에서 스크립트를 확인하여 명령을 작성하는 방법을 확인하십시오. 아마도 당신이나 다른 누군가가 JAVA_HOME거기에 하드 코딩을 하고 잊어 버렸을 것입니다.


8
당신은 승자입니다. 실제로 누군가가 스크립트 안에 JAVA_HOME을 하드 코딩했습니다! 감사합니다
James Raitsev

21
흠, 내가 전에 나 자신에게 그 일을 한 적이 없어 ... :)
Ryan Stewart

4
mvn스크립트는 Oracle JDK 7의 OSX 설치와 호환되지 않았으며 멋진 설정을하지 않았습니다 (스크립트는 Library/Java/JavaVirtualMachines/CurrentJDK존재하지 않는 폴더 를 찾습니다 ( jdk1.7.0_25.jdk대신 존재 CurrentJDK하지 않음)). 우아한 수정이지만 방금 내보내기를 하드 코딩했으며 이제 작동합니다 (PS : maven은 OSX에 있습니다 /usr/share/maven/bin/mvn)
Raekye

6
OSB 1.9.2 mavericks, homebrew를 통해 maven을 설치하면 mvn 스크립트는 다음 위치에 있습니다./usr/local/bin/mvn
StackExchange What The Heck

1
나는 JAVA_HOME을 설정했고 이것이 실마리를 주었다. 감사!! : D
Alfonso Nishikawa

109

최신 버전의 maven 컴파일러 플러그인을 사용해보십시오.

    <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.2</version>
        <configuration>
            <source>1.7</source>
            <target>1.7</target>
        </configuration>
    </plugin>

또한 maven으로 소스 파일 인코딩을 지정하는 것이 전 세계적으로 더 잘 수행됩니다.

<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

편집 :이 답변이 여전히 주목 받고 있으므로 최신 값 (최신 편집 기준)은 maven 컴파일러 플러그인의 경우 3.2이고 java의 경우 1.8입니다 .maven을 통해 Java 8 코드를 컴파일하는 방법에 대한 질문은 다음과 같습니다. 곧 나타납니다 :-)


"<version> 3.0 </ version>"을 추가하면 문제가 해결되었습니다.
Sriram

@radai, 그것의 3.2 지금, 그러나 증가를 멈추지 않을 것이므로 업데이트를 유지하는 바보 같은 ...
Lucas

@Lucas-구식 버전을 고수하는 사람들을 책임지고 싶지 않습니다. couldnt 나와 함께 살 수 :-)
radai

이 답변이 제기 된 질문에 대한 올바른 해결책이 아닌데 왜 거의 100 개의 공감대가 있습니까? 나는 길을 잃었다 ...
Zero3

48

나는 같은 문제가 있었고 이것을 해결하기 위해이 블로그 기사를 따르십시오 : http://www.mkyong.com/java/how-to-set-java_home-environment-variable-on-mac-os-x/

$ vim .bash_profile 

export JAVA_HOME=$(/usr/libexec/java_home)

$ source .bash_profile

$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home

@mkyong 에게 특별한 tks

편집 : 지금 사용하고 있습니다 : jEnv + sdkman


3
이것은 나를 위해 일했습니다. macports와 sun jdk의 maven과 함께 mac을 사용하고 있습니다. 분명히 그 콤보는 까다로 웠습니다.
Quantum7

1
훌륭한 일. 모든 명령에 감사드립니다! Maveriks에서 작동
Maksim

1
이것은 가장 쉽고 가장 우아한 솔루션입니다. 감사합니다!
BK-

26

아래 태그에 대해서는 pom.xml을 확인하십시오.

<properties>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
</properties>

필요한 jdk 버전을 가리켜 야합니다


19

Maven 버전을 확인해야합니다.

mvn -version

Maven이 컴파일에 사용하는 Java 버전을 찾을 수 있습니다. 필요한 경우 JAVA_HOME을 재설정해야 할 수도 있습니다.


19

나는 같은 문제가 있었다. Maven 스크립트가 아래의 CurrentJDK 링크를보고 1.6 JDK를 찾기 때문입니다. 최신 JDK를 설치하더라도이 문제는 해결되지 않습니다. $ HOME / .bash_profile 스크립트에서 JAVA_HOME을 설정할 수는 있지만 대신 다음과 같이 기호 링크를 수정하기로 선택했습니다.

ls -l /System/Library/Frameworks/JavaVM.framework/Versions/
total 64
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.4 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.4.2 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.5 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.5.0 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.6 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.6.0 -> CurrentJDK
drwxr-xr-x  9 root  wheel  306 11 Nov 21:20 A
lrwxr-xr-x  1 root  wheel    1 30 Oct 16:18 Current -> A
lrwxr-xr-x  1 root  wheel   59 30 Oct 16:18 CurrentJDK -> /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents

CurrentJDK는 1.6.0.jdk를 가리 킵니다.

이 문제를 해결하려면 다음 명령을 실행하십시오 (설치된 버전을 확인하고 적절히 조정해야합니다).

sudo rm /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
sudo ln -s /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/ /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK

mvn clean install -debug가 java 1.6을 표시하면 정답입니다
cetnar

4

진단 :

"mvn --version"을 실행하여 Maven이 사용하는 Java 버전을 확인할 수 있습니다

데비안 솔루션 :

mvn 스크립트는 javac (javac)를 찾아서 JAVA_HOME env 변수를 내부적으로 설정합니다. 따라서 여러 Java 버전 (예 : JDK 6 및 JDK 7)을 동시에 설치하고 Debian Alternatives 시스템을 사용하여 "java"에 대한 대안을 JDK 7로 변경하더라도 mvn은 여전히 ​​JDK 6을 사용합니다. "javac"에 대한 대안도 변경해야합니다. 예 :

# update-alternatives --set javac /usr/lib/jvm/java-7-openjdk-amd64/bin/javac

편집하다:

사실, 더 나은 해결책은 update-java-alternatives를 사용하는 것입니다 (예 :

# update-java-alternatives -s java-1.7.0-openjdk-amd64

에 설명 된대로 https://wiki.debian.org/JavaPackage 이 변화하기 때문에, 모든 다양한 자바 툴에 대한 대안을 (그래서 다스있다).


고마워, 내가 찾던 것
evandongen

고마워, 나는 update-alternatives --config javac
Leonard Saers

2

최신 플러그인을 사용해보십시오. maven 사이트에서 :

<version>3.0</version>

나는 또한 다음을 보았다 :

<compilerVersion>1.7</compilerVersion>

작동하지 않습니다. [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.0:compile (default-compile) on project divs: Fatal error compiling: invalid target release: 1.7 -
James Raitsev

1.7을 컴파일하기 위해 2.3.2를 성공적으로 사용했습니다 ...하지만 가능하면 항상 최신 버전을 사용하는 것이 좋습니다.
Lucas

더 검색했습니다. 사용하는 경우 종속성 플러그인 관리를 확인하십시오.
Joop Eggen

추가 된 <pluginDependency>, 같은 문제
제임스 Raitsev

그것이 모듈 프로젝트라면, 부모 프로젝트는 조사해 볼 가치가 있습니다. 경우 여기 수 없습니다. maven은 Java 1.7로 실행됩니까?
Joop Eggen

2

Eclipse의 속성에서 Java 컴파일러 설정을 변경하십시오.

이동 : 환경 설정-> Java-> 컴파일러-> 컴파일러 준수 레벨-> 1.7 적용 확인

IDE를 다시 시작하십시오.

프로젝트의 컴파일러 설정을 확인하십시오-Goto : 프로젝트 속성-> Java 컴파일러-> (Java 빌드 경로에서 실행 환경 'JavaSE-1.6'의 준수 사용)을 선택 취소하고 드롭 다운에서 1.7을 선택하십시오. (이미 1.7이면 무시)

IDE를 다시 시작하십시오.

여전히 문제가 지속되는 경우-터미널의 명령을 사용하여 개별 테스트 사례를 실행하십시오.

mvn -Dtest=<test class name> test

2

여기에서 OS가 무엇인지 잘 모르지만 update-java-alternatives를 사용하여 debian / ubuntu에서 많은 Java 버전을 제거하여 기본 jvm 시스템을 넓게 설정할 수 있습니다.

#> update-java-alternatives -l
java-1.6.0-openjdk-amd64 1061 /usr/lib/jvm/java-1.6.0-openjdk-amd64
java-1.7.0-openjdk-amd64 1071 /usr/lib/jvm/java-1.7.0-openjdk-amd64
java-6-sun 63 /usr/lib/jvm/java-6-sun
java-7-oracle 1073 /usr/lib/jvm/java-7-oracle

새로 설정하려면 다음을 사용하십시오.

#> update-java-alternatives -s java-7-oracle

대부분의 앱에 JAVA_HOME을 설정할 필요가 없습니다.


2

이클립스에서 ur 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 "Run Configurations"를 엽니 다. jre 버전을 확인하십시오. 때로는 빌드 경로에서 버전을 변경 한 후에도 Eclipse에서 기본적으로 변경되지 않습니다.


2

(기본이 아닌 /etc/alternatives/java) JVM 이 필요한 특정 컴파일의 경우 다음 mvnJAVA_HOME같이 명령 접두어를 고려 하십시오.

JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/ mvn package

여기서는 기본값이 Java 8이라고 가정하고 특정 프로젝트에는 Java 7이 필요합니다.


이 같은 다음이 변경 될 필요가 GIT (또는 SCM)에서 다운로드 project6의 소스에 수행하지 않는 저를 위해 최선을 다했다
jwilleke

이 답변은 더 많은 투표를 받아야합니다. Java7 및 Java 8을 설치하고 다시 설치할 필요없이 기본값이 Java 8 인 시스템에서 Java 7이 필요한 코드를 컴파일하는 데 도움이되었습니다.
R11G

1

{JAVA_1_4_HOME} / bin / javac도 시도 할 수 있습니다 ...

<plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
                <source>1.7</source>
                <target>1.7</target>
                <showDeprecation>true</showDeprecation>
                <showWarnings>true</showWarnings>
                <executable>{JAVA_HOME_1_7}/bin/javac</executable>
                <fork>true</fork>
        </configuration>
    </plugin>

4
공유 할 코드의 경로를 하드 코딩해서는 안됩니다.
Jan Segre

@ Jan Segre, 알았어. 난 그것을 바꾼다 :)
baybora.oren

0

좋아, 나도이 문제를 스스로 해결했다. JAVA_HOME이 더 중요합니다. Maven 플러그인의 소스 / 대상 특성과 비교하여 버전이 낮거나없는 경우이 오류가 발생합니다.

JAVA_HOME에 올바른 버전이 있고 PATH에 포함되어 있는지 확인하십시오.


0

잘못된 버전의 java를 지정했을 수 있습니다. 사용중인 Java 버전을 확인하려면 java -version (터미널에 있음). 최신 Maven 컴파일러 버전은 maven-compile-plugin 로 이동 Java 6을 사용하고 최신 버전의 maven 컴파일러 플러그인은 3.1 인 경우 플러그인이 다음과 같이 표시 될 수 있습니다.

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>

0

이전 답변 중 어느 것도 내 유스 케이스를 완전히 해결하지 못했습니다.

빌드중인 디렉토리를 제거해야합니다. 깨끗한. 그런 다음 다시 설치하십시오. 자동 권한 문제처럼 보입니다.


0

파일 메뉴-> 프로젝트 구조로 이동하여 프로젝트 SDK를 1.7로 변경하고 프로젝트 언어 수준을 7로 변경할 때까지 IntelliJ IDEA 14 에서이 문제가 발생했습니다.


0

이클립스로 작업 할 때이 문제가 있었고 jre 7을 참조하도록 프로젝트의 빌드 경로를 변경해야했습니다.

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