[java] Maven을 통한 Java 7 코드 컴파일

내 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)했습니다.



답변

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


답변

최신 버전의 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 코드를 컴파일하는 방법에 대한 질문은 다음과 같습니다. 곧 나타납니다 🙂


답변

나는 같은 문제가 있었고 이것을 해결하기 위해이 블로그 기사를 따르십시오 : 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


답변

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

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

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


답변

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

mvn -version

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


답변

나는 같은 문제가 있었다. 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 –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 이 변화하기 때문에, 모든 다양한 자바 툴에 대한 대안을 (그래서 다스있다).