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バージョンを設定する方法について説明しました。