私のマシンには2つのJavaバージョンがインストールされています:(1.6と1.7が私によって手動でインストールされました)。異なるプロジェクトには両方とも必要です。しかし、Mavenには1.7が必要です。今、私のMavenは1,6 Javaバージョンを使用しています。Mavenに1.7を使用するように設定するにはどうすればよいですか。
MavenはJava_HOME
パラメータを使用して、実行するJavaバージョンを見つけます。あなたのコメントから、設定ではそれを変更できないことがわかりました。
Java_HOME
パラメータを設定することができます(そして必要ならば後でそれを元に戻す)。mvn
(non-windows)/ mvn.bat
/mvn.cmd
(windows)に移動して、そこにJavaのバージョンを明示的に設定することもできます。POMでは、コンパイラのプロパティを設定できます。 1.8の場合:
<project>
...
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
...
</project>
大規模なコードベースがありますが、そのほとんどはJavaです。私が取り組んでいるものの大部分はJava 1.7か1.8のどちらかで書かれています。 Java_HOME
は静的なので、Mavenを実行するための別の値で別名を.bashrc
に作成しました。
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セントを追加し、明示的に解決策を提供する。
私のWindowsマシンにはJDK 1.5
とJDK 1.6
の2つのJDKがインストールされています。
私のデフォルトは(そしてWindowsシステム環境変数に設定されています)Java_HOME
はJDK 1.5
に設定されています。
しかし、私はJDK 1.6
を使用してビルドする必要があるmavenプロジェクトを持っています(つまり JBehave Tutorial's Etsy.com )。
このシナリオでの私の解決策(これはうまくいきました!)は、@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
Windowsの場合
システム変数内のJava_HOME
変数を変更したくない場合。
mvn.bat
ファイルを編集して、このような行を追加してください
set Java_HOME=C:\Program Files\Java\jdk1.7.0_45\jre
これは@Jonathanによって言及されているように@REM ==== START VALIDATION ====
の後に行うことができます。
Mac(およびLinux?)の場合
Java_HOME
または~/.bashrc
内の~/.bash_profile
変数を変更したくない場合
~/.mavenrc
ファイルを作成し、 Java_homeツール を使ってJava_HOME
を再定義することができます。
export Java_HOME=`/usr/libexec/Java_home -v 1.7.0_45`
健全性チェック
次のコマンドを実行して、すべてが正常に機能していることを確認できます。 jdkのバージョンは違うはずです。
mvn -version
それから
Java -version
私がつい最近、Mavenに7年間勤務した後、toolchains.xmlについて学びました。 Mavenはそれを文書化し、2.0.9からサポートしています - toolchains documentation
そこで、私は〜/ .m2 /フォルダにtoolchain.xmlファイルを以下の内容で追加しました。
<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を定義するときのようなものです。
プロジェクトや環境変数への影響を避けるために、ソースとターゲットのJavaバージョンを指定して、Maven Compiler PluginをプロジェクトのPOMだけに設定することができます。
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
...
</plugins>
問題に対する一つの簡単な解決策 -
Java_HOME =/usr/lib/jvm/Java 6 Sun/mvnクリーンインストール
Macでは、それは次のようになります -
Java_HOME = /ライブラリ/ Java/JavaVirtualMachines/jdk1.7.0_21.jdk /コンテンツ/ホーム/ mvn clean install
シモンズ:私が見つけた一つの特別なケースは、上記の与えられたコマンドが '魚'シェルでは動作しないことです。私はbash Shellも利用可能でしたが、そこでうまくいきました。 bashシェルに切り替えるには、コマンド 'bash'を使用するだけです。
Windowsでは、次のように、異なるJDKバージョンの複数のバッチファイルをMaven binフォルダーに追加するだけです。
mvn11.cmd
@echo off
setlocal
set "Java_HOME=path\to\jdk11"
set "path=%Java_HOME%;%path%"
mvn %*
その後、mvn11
を使用して、指定されたJDKでMavenを実行できます。
以下の手順に従って、Mavenが任意のJavaバージョンを使用するように設定できます。
あなたのマシンにjenvをインストールしてください link
コマンドラインで次のコマンドを発行して、マシンにインストールされている利用可能なJavaのバージョンを確認します。
jenvのバージョン
次のコマンドを使用して、グローバルJavaバージョンを指定できます。
jenvグローバルOracle64-1.6.0.39
コマンドラインのディレクトリで次のコマンドを使用して、任意のディレクトリ(プロジェクト)のローカルJavaバージョンを指定できます。
jenvローカルのOracle64-1.7.0.11
pom.xmlに正しいJavaバージョンを追加してください。
コマンドラインでmavenを実行している場合jenv mavenプラグインを使用
jenv enable-plugin maven
今、あなたはあなたのマシンのどんなJavaバージョンでもどんな問題もなしにどんなプロジェクトにでも設定することができます。
Macの場合(正しいバージョンがインストールされていると仮定)
Java_HOME=`/usr/libexec/Java_home -v 1.8` mvn clean install -DskipTests
また、twoのバージョンのmavenをインストールして、oneを編集して、ここで編集することもできます。
mvn(Windows以外)/mvn.bat/mvn.cmd(Windows)
あなたの%Java_home%の外観をあなたのJavaが望むパスに置き換えてください。それからその修正されたパスからmavenを実行してください。
コンソールでJava_HOME
を設定しただけではMacで成功しませんでしたが、この方法で成功しました
~/.mavenrc
のパスになるでしょう)export Java_HOME=$(/usr/libexec/Java_home -v 1.7)
を貼り付けますLinux/Unixでは、 'mvn'シェルスクリプト内のJava_HOMEは、次の設定によって上書きされます。
$HOME/.mavenrc
Java 11の場合は、設定する必要があります。
<Java.version>11</Java.version>
ではなく
<Java.version>1.11</Java.version>
または、このエラーが出ることもあります。
あなたは 異なるJDKを使ってソースをコンパイルする をmaven-compiler-plugin
で設定することができます。
<executable>
タグでjavac
へのパスを指定するだけです。たとえば、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>