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

このマシンでは、私は使用していますzshecho $0リターン-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を複数回source(d)しています。


2
あなたのPATHは/usr/bin、ディレクトリのリストの最初にありません。javac -versionディレクトリを指定せずに試してください。
Peter Lawrey、

@PeterLawrey、私は得るjavac 1.7.0_10
James Raitsev

2
何をecho $JAVA_HOME教えてくれますか?
Andrew Logvinov

2
JAVA_HOME変数はどうですか?mvnはJAVA_HOMEを使用します。また、コマンドラインから構築していますか、それともIDE内から構築していますか?
Lucas

8
Mavenを--debugで実行すると、実行に使用している正確なコマンドラインがjavac(他の多くのものとともに)示されます。それは何と言いますか?
Emil Sit

回答:


153

mvnMavenインストールのスクリプトをチェックして、コマンドがどのように構築されているかを確認してください。たぶん、あなたや他の誰かJAVA_HOMEがそこにa をハードコードし、それを忘れてしまったのかもしれません。


8
あなたが勝者です。確かに誰かがスクリプト内にJAVA_HOMEをハードコーディングしました!ありがとう
ジェームズRaitsev

21
えっと、私がこれまでに自分でやったことはありません... :)
ライアン・スチュワート

4
このmvnスクリプトは、OracleのJDK 7の私のOSXインストールと互換性がなく、特別な設定は何もしていません(このスクリプトはLibrary/Java/JavaVirtualMachines/CurrentJDK、私のために存在しなかったフォルダーを探します(存在していたのはのjdk1.7.0_25.jdk代わりですCurrentJDK)。エレガントな修正ですが、エクスポートをハードコーディングしただけで機能します(PS:OSXのmavenはにあります/usr/share/maven/bin/mvn
Raekye

6
OSX 1.9.2 mavericks、mavenがhomebrew経由でインストールされている場合、mvnスクリプトは次の場所にあります/usr/local/bin/mvn
StackExchange What The Heck

1
私はJAVA_HOMEセットを持っていて、これが手掛かりを与えました。ありがとう!! :D
アルフォンソ西川14

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>」を追加して問題を修正しました。
スリラム

@radai、その3.2は今ですが、増加を止めることは決してないため、更新を続けるのはばかげています...
Lucas

@Lucas-古いバージョンに固執する人々に対して責任を負いたくないだけです。自分と一緒に暮らすことができなかった:-)
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

特別TKS @mkyong

編集:今私が使用しています:jEnv + sdkman


3
これでうまくいきました。私はMacを使用しています。MacportsのMavenとSun JDKを使用しています。どうやらそのコンボはトリッキーでした。
Quantum7 2014

1
すごい仕事。すべてのコマンドをありがとう!現在Maveriksで動作しています
マクシム

1
これが最も簡単でエレガントなソリューションです。ありがとうございました!
BK- 2015

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クリーンインストール-debugショーは1.6をJavaの場合はこれが正しい答えである
cetnar

4

診断:

「mvn --version」を実行すると、Mavenが使用するJavaバージョンを確認できます

Debianのソリューション:

mvnスクリプトは、javac(どのjavac)を探すかによって、JAVA_HOME環境変数を内部的に設定します。したがって、JDK 6やJDK 7などの複数のJavaバージョンを同時にインストールしていて、「Java」の代替をJDK 7に変更した場合でも、Debian代替システムを使用してそれらを選択すると、mvnは引き続きJDK 6を使用します。 「javac」の代替も変更する必要があります。例えば:

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

編集:

実際には、さらに良い解決策はupdate-java-alternatives(eg)を使用することです

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

https://wiki.debian.org/JavaPackageで詳細に説明されているように、これはさまざまなJavaツールの代替案をすべて変更するためです(1ダースほどあります)。


ありがとう、私が探していたもの
evandongen '19 / 06/19

おかげで、Javaバージョンを次のように設定した後、混乱しました: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

私は以前に2.3.2を使用して1.7をコンパイルすることに成功しました...しかし、可能であれば常に最新のものを使用することをお勧めします。
Lucas

さらに検索しました。使用する場合は、依存関係プラグインの管理を確認してください。
Joop Eggen

<pluginDependency>を追加、同じ問題
James Raitsev

モジュールプロジェクトの場合、親プロジェクトを検討する価値があります。これはここでは当てはまりません。MavenはJava 1.7で実行されていますか?
Joop Eggen、

2

EclipseのプロパティでJavaコンパイラ設定を変更してみてください-

ジャンプ:設定-> Java->コンパイラ->コンパイラコンプライアンスレベル-> 1.7 OKを適用

IDEを再起動します。

プロジェクトのコンパイラ設定を確認します-移動:プロジェクトプロパティ-> Javaコンパイラ->チェックを外し(Javaビルドパスの実行環境 'JavaSE-1.6'からコンプライアンスを使用します。)、ドロップダウンから1.7を選択します。(すでに1.7の場合は無視してください)

IDEを再起動します。

それでも問題が解決しない場合-端末でコマンドを使用して個々のテストケースを実行します-

mvn -Dtest=<test class name> test

2

ここでOSがどのように使用されているかはわかりませんが、update-java-alternativesを使用してJavaバージョンの多くをdebian / ubuntuで排除することで、デフォルトの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プロジェクトを右クリックし、「実行構成」を開きます。そこでJREバージョンを確認します。ビルドパスのバージョンを変更した後でも、これはデフォルトではeclipseで変更されないことがあります。


2

(デフォルトではない/etc/alternatives/java)JVM を必要とする特定のコンパイルの場合、mvn次のJAVA_HOMEようにコマンドの前に付けることを検討してください。

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

ここでは、デフォルトがJava 8であると想定していますが、現在の特定のプロジェクトではJava 7が必要です。


これは、GIT(またはSCM)からダウンロードしたプロジェクト6のソースに変更を加える必要がないため、私にとって最も効果的でした
jwilleke

この回答は、より多くの賛成票に値します。Java7とJava 8をインストールして再インストールする必要なしに、デフォルトでJava 8であるマシンでJava 7を必要とするコードをコンパイルするのに役立ちました
R11G

1

{JAVA_1_4_HOME} / bin / javacyouも試すことができます...

<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 2013年

@Jan Segre、それを変更します:)
baybora.oren 14年

0

はい、私もこの問題を自分で解決しました。JAVA_HOMEの方が重要です。Mavenプラグインのソース/ターゲットプロパティと比較して、バージョンが低い、またはバージョンがない場合、このエラーが発生します。

JAVA_HOMEに適切なバージョンがあり、PATHに含まれていることを確認してください。


0

間違ったバージョンのJavaを指定している可能性があります。java -version(端末内)を使用して、使用しているjavaのバージョンを確認します。移動Mavenのコンパイル・プラグインは、Java 6を使用している場合、あなたのプラグインは、次のように表示されることがあり、最新のMavenコンパイラのバージョン用と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

IntelliJ IDEA 14でこの問題が発生したのは、[ファイル]メニューから[プロジェクトの構造]に移動し、プロジェクトのSDKを1.7に、プロジェクトの言語レベルを7に変更するまででした。


0

Eclipseを使用しているときにこの問題が発生しました。jre7を参照するようにプロジェクトのビルドパスを変更する必要がありました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.