MavenがJDK 1.6を使用しているのに、java -versionが1.7である理由


159

私はmavenとMacOSが初めてです。

私の端末でmavenをセットアップしました。バージョン設定を(を使用してmvn -v)取得すると、JDK 1.6が使用されているように見えますが、JDK 1.7がインストールされています。どうかしましたか?

入力するコマンドは次のとおりです。

blues:helloworld Ninja$ java -version
java version "1.7.0_05"
Java(TM) SE Runtime Environment (build 1.7.0_05-b06)
Java HotSpot(TM) 64-Bit Server VM (build 23.1-b03, mixed mode)`
blues:helloworld Ninja$ mvn -v
Apache Maven 3.1.0 (893ca28a1da9d5f51ac03827af98bb730128f9f2; 2013-06-28 10:15:32+0800)
Maven home: /usr/local/Cellar/maven/3.1.0/libexec
Java version: 1.6.0_51, vendor: Apple Inc.
Java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Default locale: zh_CN, platform encoding: EUC_CN
OS name: "mac os x", version: "10.8.4", arch: "x86_64", family: "mac"

2
PATH変数とJAVA_HOME変数を投稿できますか?
Jeanne Boyarsky 2013

@JeanneBoyarsky blues:helloworld Ninja $ echo $ JAVA_HOME blues:helloworld Ninja $ echo $ PATH / usr / bin:/ bin:/ usr / sbin:/ sbin:/ usr / local / bin:/ usr / local / git / bin
忍者

@JeanneBoyarsky、これはあなたが欲しいですか?
忍者

3
私は女性です(「サー」と呼ぶのは間違っています)とはい。JAVA_HOMEを設定してみてください。あなたの問題は、この問題に似ているようだ:stackoverflow.com/questions/13752519/...
ジャンヌBoyarsky

2
あなたが与えられたURL私rudeness.Theを許し@JeanneBoyarskyすることは問題Iのmeet.Thanksたくさんの〜である
忍者

回答:


227

以下をあなたのに追加してください~/.mavenrc

export JAVA_HOME=/Library/Java/JavaVirtualMachines/{jdk-version}/Contents/Home

2番目のソリューション:

echo export "JAVA_HOME=\$(/usr/libexec/java_home)" >> ~/.bash_profile


はい、正解です。JAVAHOMEが必要です。代わりに/ etc / profileを編集します
Ninja

8
まあ、〜/ .mavenrcに追加すると、他のアプリが影響を受けないようになります。mvnだけがこのバージョンのJDKを取得します。:)
Gaurav Vaish 2013年

43
export JAVA_HOME = $(/ usr / libexec / java_home -v 1.7)
jla

1
.mavenrcソリューションは私にとって完璧に機能しました。また、私がインストールしたのはJDK 1.8ではなく、JDK 1.8のみでした。ガウラフありがとう!
timothyclifford 2015

2
Macでjenvを使用している場合はexport JAVA_HOME="$HOME/.jenv/versions/`jenv version-name`"~/.mavenrcファイルの場合があります。
Eddy

46

入る

/System/Library/Frameworks/JavaVM.framework/Versions

CurrentJDKを指すようにシンボリックリンクを更新します

/Library/Java/JavaVirtualMachines/YOUR_JDK_VERSION/Contents/

例えば

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

これですぐに機能します。


1
CurrentJDKのシンボリックリンクトリックは、maven 3.3.1では機能しないようですが、〜/ .mavenrcを変更すると機能します。
Stefan L

41

あなたもすることができます、

<properties>
      ...  

      <!-- maven-compiler-plugin , aka JAVA Compiler 1.7 -->
      <maven.compiler.target>1.7</maven.compiler.target>
      <maven.compiler.source>1.7</maven.compiler.source>

      ...  
</properties>

5
MavenがJava 6を使用して実行されている場合、これは機能しません。クラッシュするのは[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project {projectname}: Fatal error compiling: invalid target release: 1.7 -> [Help 1]
Gavin S. Yancey

27

また、コンパイルするJavaバージョンをmavenに明示的に指示することもできます。をmaven-compiler-pluginpomに追加してみてください。

<project>
  [...]
  <build>
    [...]
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
        </configuration>
      </plugin>
    </plugins>
    [...]
  </build>
  [...]
</project>

MavenプロジェクトをIDEにインポートした場合、IDEには、Mavenランナーが使用しているデフォルトコンパイラ用のMaven設定が含まれている可能性があります。


o、ありがとう。しかし、私は始めていません。私は「mvn -v」だけです...理由は、JAVA_HOMEを割り当てないためです
Ninja

コンパイルされるコードにのみ影響することに注意してください。私が使用していた外部ライブラリがJava 7用にコンパイルされており、MavenがJava 6で実行しようとしたため、この問題に遭遇してここに来ました

MavenがJava 6を使用して実行されている場合、これは機能しません。クラッシュするのは[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project {projectname}: Fatal error compiling: invalid target release: 1.7 -> [Help 1]
Gavin S. Yancey

これは、デフォルトコンパイラのIDEのmaven設定が1.7より低いが、インストールされているjdkが1.7より高い場合に機能します
John Doe

9

それは私を助けました。pom.xmlに追加するだけです。

デフォルトでは、mavenコンパイラプラグインはJava 1.5または1.6を使用するため、pom.xmlで再定義する必要があります。

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>

4

Eclipseユーザー向け。たとえば、クリーンパッケージを実行する実行構成がある場合。

「実行構成」パネルには、実行するランタイムに対して指定できる「JRE」タブがあります。この構成は、pom.xmlの内容を上書きすることに注意してください。



2

互換性を確認してください。私は苦労mvn 3.2.1し、jdk 1.6.0_37多くの時間。すべての変数が設定されましたが、機能していませんでした。最後に私はアップグレードjdk to 1.8.0_60mvn 3.3.3、それはうまくいきました。次のような環境変数:

JAVA_HOME=C:\ProgramFiles\Java\jdk1.8.0_60 
MVN_HOME=C:\ProgramFiles\apache-maven\apache-maven-3.3.3 
M2=%MVN_HOME%\bin extend system level Path- ;%M2%;%JAVA_HOME%\bin;

1

@MasterGauravのソリューションは完全に機能しており、

私は通常、javaスイッチをzsh関数に入れます。

alias java_ls='/usr/libexec/java_home -V 2>&1 | grep -E "\d.\d.\d[,_]" | cut -d , -f 1 | colrm 1 4 | grep -v Home'

function java_use() {
    export JAVA_HOME=$(/usr/libexec/java_home -v $1)
    echo export "JAVA_HOME=$(/usr/libexec/java_home -v $1)" > ~/.mavenrc
    export PATH=$JAVA_HOME/bin:$PATH
    java -version
}

次にjava_ls、マシンで使用可能なすべてのjvmを2つ取得して実行java_use 1.7し、JavaとMav​​enの両方に1.7バージョンを使用するように実行します。

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