Mavenが別のJDKを使用する理由
1. 概要
このチュートリアルでは、Mavenがシステムに設定されているデフォルトのバージョンとは異なるバージョンのJavaを使用する理由を説明します。 さらに、Mavenの構成ファイルがどこにあるかを示します。 次に、MavenでJavaバージョンを構成する方法を説明します。
2. Maven構成
まず、可能なシステム構成を見てみましょう。 Maven は、システムに設定されているデフォルトのバージョンとは異なるバージョンのJavaを使用します。 Maven構成は以下を返します。
$ mvn -v
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T17:41:47+01:00)
Maven home: C:\Users\test\apps\maven\3.3.9
Java version: 11.0.10, vendor: Oracle Corporation
Java home: C:\my\java\jdk-11.0.10
Default locale: pl_PL, platform encoding: Cp1250
OS name: "windows 10", version: "10.0", arch: "amd64", family: "dos"
ご覧のとおり、Mavenバージョン、Javaバージョン、およびOS情報を返します。 MavenツールはJDKバージョン11.0.10を使用します。
システムに設定されているJavaバージョンを見てみましょう。
$ java -version
java version "13.0.2" 2020-01-14
Java(TM) SE Runtime Environment (build 13.0.2+8)
Java HotSpot(TM) 64-Bit Server VM (build 13.0.2+8, mixed mode, sharing)
デフォルトのJDKは13.0.2に設定されています。 次のセクションでは、Mavenで使用されているものと一致しない理由を説明します。
3. JAVA_HOMEをグローバルに設定する
デフォルトの設定を見てみましょう。 とりわけ、 the JAVA_HOME変数は必須のMaven構成です。 さらに、設定されていない場合、mvnコマンドはエラーメッセージを返します。
$ mvn
Error: JAVA_HOME not found in your environment.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation.
Linuxでは、エクスポートコマンドを使用してシステム変数を設定します。 Windowsには、その目的のために専用のシステム変数設定があります。 グローバルに設定されている場合、Mavenはシステムに設定されているデフォルトバージョンのJavaを使用します。
4. Maven構成ファイル
ここで、Maven構成ファイルの場所を簡単に見てみましょう。 構成を提供できる場所がいくつかあります:
- .mavenrc / mavenrc_pre.cmd –ユーザーのホームディレクトリにあるユーザー定義のスクリプト
- settings.xml – 〜/ .m2 ディレクトリにあるファイルで、プロジェクト間の構成が含まれています
- .mvn –プロジェクト内にある構成のディレクトリー
さらに、MAVEN_OPTS環境変数を使用してJVM起動パラメーターを設定する場合があります。
5. JAVA_HOMEをMaven専用に設定する
JavaのバージョンがMavenで使用されているものとは異なることがわかりました。 つまり、 Mavenは、JAVA_HOME変数で提供されるデフォルト構成を上書きします。
mvnコマンドの先頭で実行されるユーザー定義スクリプトで設定できます。 Windowsでは、%HOME%\ mavenrc_pre.batまたは%HOME%\mavenrc_pre.cmdファイルに設定します。 Mavenは「.bat」ファイルと「.cmd」ファイルの両方をサポートします。 このファイルでは、JAVA_HOME変数を設定するだけです。
set JAVA_HOME="C:\my\java\jdk-11.0.10"
一方、Linuxには同じ目的の$HOME/.mavenrcファイルがあります。 ここでは、変数をほぼ同じ方法で設定します。
JAVA_HOME=C:/my/java/jdk-11.0.10
そのセットアップのおかげで、システムのデフォルトはJDK 13ですが、MavenはJDK11を使用します。
MAVEN_SKIP_RCフラグを使用してユーザー定義スクリプトの実行をスキップできます。
さらに、Mavenの実行可能ファイルに変数を直接設定することもできます。 ただし、このようなアプローチは、Mavenをより高いバージョンにアップグレードした場合に自動的に適用されないため、お勧めしません。
6. 結論
この短い記事では、Mavenがデフォルトバージョンとは異なるJavaバージョンを使用する方法について説明しました。 次に、Mavenの構成ファイルがどこにあるかを示しました。 最後に、MavenのJavaバージョンを設定する方法について説明しました。