私のマシンには2つのJavaバージョンがインストールされています(1.6と1.7は手動でインストールしました)。異なるプロジェクトで両方が必要です。しかし、Mavenには1.7が必要ですが、Mavenは1,6のJavaバージョンを使用していますが、Mavenを1.7に設定するにはどうすればよいですか?
私のマシンには2つのJavaバージョンがインストールされています(1.6と1.7は手動でインストールしました)。異なるプロジェクトで両方が必要です。しかし、Mavenには1.7が必要ですが、Mavenは1,6のJavaバージョンを使用していますが、Mavenを1.7に設定するにはどうすればよいですか?
回答:
MavenはJAVA_HOME
パラメーターを使用して、実行する予定のJavaバージョンを見つけます。あなたのコメントから、設定ではそれを変更できないことがわかります。
JAVA_HOME
Mavenを起動する直前にパラメーターを設定できます(必要に応じて、後でパラメーターを元に戻します)。mvn
(非Windows)/ mvn.bat
/ mvn.cmd
(Windows)に移動して、Javaバージョンを明示的に設定することもできます。JAVA_HOME
(あなたがクローズシェルは、変更がなくなっていることをするとすぐに)すべてのマシンの構成を変更することなく、ローカルのシェルに。あなたも、単一のコマンドのためにそれを変更することができますJAVA_HOME=/path/to/jdk17/ mvn build
大規模なコードベースがあり、そのほとんどはJavaです。私が取り組んでいることの大部分は、Java 1.7または1.8で書かれています。JAVA_HOME
は静的なので、.bashrc
Mavenを実行するために、さまざまな値でエイリアスを作成しました。
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を実行できます。
mvn2
、mvn3
Javaバージョンも使用されると命名が少しファンキーになります...:D
alias mvn8 = "JAVA_HOME=`/usr/libexec/java_home -v 1.8` && mvn
&&
before を省略しなければなりませんmvn
。mvnは、JAVA_HOMEの値をで認識しません&&
。
Windowsの場合
JAVA_HOME
システム変数内で変数を変更したくない場合。
mvn.bat
ファイルを編集して、次のような行を追加します
set JAVA_HOME=C:\Program Files\Java\jdk1.7.0_45\jre
これは@REM ==== START VALIDATION ====
、@ Jonathanによって言及された後に行うことができます
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
私の2セントを追加し、ソリューションを明示的に提供します。
Windowsマシンに2つのJDKがインストールされています- JDK 1.5
とJDK 1.6
。
デフォルト(およびWindowsシステム環境変数にJAVA_HOME
設定)はに設定されていJDK 1.5
ます。
ただし、私はを使用してビルドする必要があるMavenプロジェクト(つまり、JBehaveチュートリアルのEtsy.com)を持っていJDK 1.6
ます。
このシナリオでの私の解決策(うまくいった!)は、で@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
mvn.bat
に名前が変更されましたmvn.cmd
。
私は最近、Mavenで7年間働いた後、toolchains.xmlについて学びました。Mavenはそれを文書化し、2.0.9からサポートしています - ツールチェーンのドキュメント
そこで、次の内容でtoolchain.xmlファイルを〜/ .m2 /フォルダーに追加しました。
<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>
これにより、Mavenを実行するJDKに関係なく、Mavenがプロジェクトのビルドに使用できるさまざまなJDKを定義できます。IDEのプロジェクトレベルでJDKを定義するときのようなものです。
問題の簡単な解決策の1つ-
JAVA_HOME = / usr / lib / jvm / java-6-sun / mvn clean install
Macでは、次のようになります-
JAVA_HOME = /ライブラリ/Java/JavaVirtualMachines/jdk1.7.0_21.jdk/Contents/Home/ mvn clean install
PS:私が見つけた特別なケースの1つは、上記のコマンドが「fish」シェルで機能しないことです。私はbashシェルも利用できましたが、そこではうまくいきました。コマンド「bash」を使用して、bashシェルに切り替えます。
でさまざまなJDKを使用してコンパイルソースを構成できますmaven-compiler-plugin
。
ただへのパスを指定するjavac
には<executable>
、タグ。たとえば、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>
以下の手順に従って、任意のJavaバージョンを使用するようにMavenを設定できます。
マシンリンクに jenvをインストールする
コマンドラインで次のコマンドを発行して、マシンにインストールされている利用可能な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
環境変数を変更せずに、Mavenコンパイラプラグインを使用して、プロジェクトレベルに基づいてJavaバージョンを管理できます。
方法1
<properties>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
方法2
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
Linux / Unixでは、 'mvn'シェルスクリプト内のJAVA_HOMEは次の設定で上書きされます
$HOME/.mavenrc