Mavenで使用されているJavaオプション(Xmx、Xms、Xssなど)を見つけるにはどうすればよいですか?
それらをsetする方法は、環境MAVEN_OPTSを介することであることがわかりました。今、私はそれが正しい設定を取得していることを保証する方法が欲しいです。
編集:環境変数の値を見たくないので、 この質問 とは異なると思います。むしろ、環境変数、settings.xml、またはその他の手段からのものであるかどうかにかかわらず、Mavenによって実際に使用されている設定を確認したいと思います。
EDIT2:MavenビルドのJavaオプションを設定する他の方法にも興味があります
さまざまなポイントとレベルでMavenのJavaオプションを設定できます(グローバルに、またはプラグイン構成を介して):
プラグイン構成:コンパイル専用
アプリケーションコードとテストコードをコンパイルするための Mavenコンパイラプラグイン 構成を使用して、両方で使用可能なcompileArgs
構成エントリを介して必要なXmx、Xms、Xssオプションを設定できます コンパイル および testCompile ゴール。公式の例が利用可能です ここ そして他のSO答えのように これ 。
以下の3番目のポイントにも例が示されています。
プラグイン構成:テスト実行専用
テスト実行に Maven Surefire Plugin 構成を使用すると、実行時に使用する必要なJavaオプションを、のargLine
構成エントリを介して設定できます。 テスト 目標。公式の例が利用可能です ここ 。
以下の3番目のポイントにも例が示されています。
プラグイン構成:プロパティ(およびプロファイル)経由
上記の2つのオプション(共通のJavaオプションの場合)をプロパティ値として組み合わせて、compileArgs
とargLine
の両方の構成エントリに渡すか、構成ごとに異なるプロパティを設定できます(あなたのニーズに)。
<property>
<jvm.options>-Xmx256M</jvm.options>
</property>
[...]
<build>
[...]
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<compilerArgs>
<arg>${jvm.options}</arg>
</compilerArgs>
</plugin>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<argLine>${jvm.options}</argLine>
</configuration>
</plugin>
</plugins>
[...]
</build>
[...]
プロパティを使用すると、(集中化に加えて)2つの追加の利点も得られます。 profiles を使用して、さまざまな目的の動作に基づいてパーソナライズできます( this SO answer )そして、次のようにコマンドラインからもオーバーライドできます。
mvn clean install -Djvm.options=-Xmx512
グローバル/プロジェクト構成:オプションファイル
Maven 3.3.1以降、プロジェクトごとに.mvn/jvm.config
ファイルでオプションを 指定 できます。これは、MAVEN_OPTSの代替であり、スコープがより狭くなっています(プロジェクトごと)。ただし、これは新しいMaven機能であるため、人々はそれを知っておく必要があります。そうしないと、トラブルシューティングとメンテナンスに影響が出る可能性があります。
グローバル/環境構成:MAVEN_OPTS
Maven well-known グローバル実行オプションを設定するための環境変数。ただし、その環境を共有するすべてのMavenビルドに適用されます(つまり、ログに記録されたユーザーごと)。
-X
オプション(デバッグが有効)を使用してMavenを実行すると、ビルドの一部として次の出力が得られます。
[DEBUG] properties used {Java.vendor=Oracle Corporation, ... , env.MAVEN_OPTS=-Xmx256M, ...
更新
結局のところ、実行されるmvn
コマンドはOSスクリプトです。 Windowsで見てみると、MAVEN_BATCH_ECHO
オプションを使用できる可能性があります。このオプションを有効にすると(値をon
に設定)、スクリプトによって実行されたコマンドがエコーされ、Java
コマンドが呼び出されます。 、ここで、オプション(MAVEN_OPTS
)が、渡されたパラメーターの完全なリストとともに正しく選択されているかどうかを確認できます。
これが私がWindowsでテストした実行です:
set MAVEN_BATCH_ECHO=on
set MAVEN_OPTS=-Xmx256M
mvn compile > output.txt
注:output.txt
には非常に多くのテキストが含まれ、ビルド出力と追加のecho
s実行が提供されます。その一部として、それは提供しました:
>"path_to_\jdk1.7\bin\Java.exe" -Xmx256M -classpath "path_to\Apache-maven-3.1.1\bin\..\boot\plexus-classworlds-2.5.1.jar" "-Dclassworlds.conf=path_to\Apache-maven-3.1.1\bin\..\bin\m2.conf" "-Dmaven.home=path_to\Apache-maven-3.1.1\bin\.." org.codehaus.plexus.classworlds.launcher.Launcher compile
ご覧のとおり、-Xmx256M
オプションが正しく選択されています。他のOSのMavenスクリプトにこのオプションがない場合は、スクリプトに追加するだけです(echo
を実行する前に、コマンドを表示する単純なJava
でも十分です)。
Mavenスクリプトは、Mavenインストールフォルダーのbin
サブフォルダーの下にあります。
Update2
さらに、Mavenは結局Javaツールであり、そのスクリプトからわかるように、Javaコマンドを呼び出すので、次のことがわかります。この中で提案されているすべての利用可能なオプション SO回答 Mavenスクリプトをわずかに変更し、jinfo
コマンドを使用すると、この他の SO回答 に従って実際に回答が得られます。
たぶん、詳細なデバッグ出力(-debug、私は思いますか?)でMavenを起動するのに役立ちます。それ以外の場合は、ps aux | grep Java
そしてプロセスの引数をチェックします(* nixを想定)。