Mavenが使用しているsettings.xmlファイルを判別するためのMavenコマンド


回答:


333

-Xオプション(デバッグ)を使用してmavenを起動し、出力の先頭を調べます。このようなものがあるはずです:

...
[INFO] Error stacktraces are turned on.
[DEBUG] Reading global settings from c:\....\apache-maven-3.0.3\conf\settings.xml
[DEBUG] Reading user settings from c:\....\.m2\settings.xml
[DEBUG] Using local repository at C:\....\repository
...

(元のディレクトリ名は私が削除します)


10
たぶん、これはmaven 3がリリースされるまでデバッグ出力に含まれていませんでしたが、約2.5年後の投稿が最終的に私が探していた正確な答えです(気づいたのが6か月遅れたことをお詫びします)。
harschware

私が使用していたmavenのバージョンであるmaven2.xは、-Bフラグが使用されたときにこの重要な詳細を表示しませんでした。...残念ながら、Jenkinsサーバーで何が起こっているのかをデバッグしようとしている場合。
Cognitiaclaeves

168

cletusの(正しい)答えに対するコメントは、複数のMaven設定ファイルが含まれていることを意味します。

Mavenは常に1つまたは2つの設定ファイルを使用します。($ {M2_HOME} /conf/settings.xml)で定義されたグローバル設定は常に必要です。ユーザー設定ファイル($ {user.home} /。m2 / settings.xmlで定義)はオプションです。ユーザー設定で定義された設定は、対応するグローバル設定よりも優先されます。

コマンドラインからグローバル設定とユーザー設定の場所を上書きできます。次の例では、グローバル設定をc:\ global \ settings.xmlに設定し、ユーザー設定をc:\ user \ settings.xmlに設定します

mvn install --settings c:\user\settings.xml 
    --global-settings c:\global\settings.xml

現在、Mavenで使用されたユーザー設定ファイルとグローバル設定ファイルを確立するためのプロパティや手段はありません。これらの値にアクセスするには、MavenCliやDefaultMavenSettingsBuilderを変更して、ファイルの場所を解決されたSettingsオブジェクトに挿入する必要があります。


1
複数のユーザーのsettings.xmlを提供できると便利なので、たとえば、異なるプロジェクトでそれらを使用できます。プロファイルを使用できることは知っています。しかし、別のファイルがあればもっと良いでしょう。それは不可能ですよね?乾杯!
2012年

ファイルを改ざんすることなく、ユーザー設定を一度だけ上書きするソリューションを探していました。したがって、ユーザー設定にグローバルファイルを使用しました。つまり--settings c:\ global \ settings.xmlこのようにしてユーザーファイルは省略されました
msp

@despot、パーティーに遅れますが、定義された複数のプロファイルといくつかのカスタム「トリガー」を使用して、次のことができます:maven.apache.org/settings.html#Activation
不可分

常に現在のフォルダーにpomを要求します。「指定した目標にはプロジェクトの実行が必要ですが、このディレクトリ(/)にPOMがありません。正しいディレクトリからMavenを呼び出したことを確認してください。-> [ヘルプ1]」
Nilesh


40

これはMavenの構成ファイルです。次の2つのレベルで指定できます。

  1. ユーザーレベル。このsettings.xmlファイルは単一のユーザーに設定を提供し、通常は$ {user.home} /。m2 / settings.xmlで提供されます。

              NOTE: This location can be overridden with the CLI option:
    
              -s /path/to/user/settings.xml
  2. グローバルレベル。このsettings.xmlファイルは、マシン上のすべてのMavenユーザーに設定を提供します(すべてが同じMavenインストールを使用していると想定)。通常は$ {maven.home} /conf/settings.xmlで提供されます。

              NOTE: This location can be overridden with the CLI option:
    
              -gs /path/to/global/settings.xml

1
プロパティは、maven.homeではなくM2_HOMEです
リッチセラー

それは問題ではありません。maven.homeを使用して環境変数を設定する場合、問題はありません
firstthumb

24

M2_HOMEグローバル変数の環境変数。設定リファレンスを参照してください。

ファイルsettings内の要素には settings.xml、のようなさまざまな方法でMaven実行を構成する値を定義するために使用される要素が含まれますがpom.xml、特定のプロジェクトにバンドルしたり、オーディエンスに配布したりしないでください。これらには、ローカルリポジトリの場所、代替リモートリポジトリサーバー、認証情報などの値が含まれます。settings.xmlファイルが存在する場所は2つあります。

  • Mavenのインストール: $M2_HOME/conf/settings.xml
  • ユーザーのインストール: ${user.home}/.m2/settings.xml

この答えが、環境の調査によってのみリポジトリの決定が行われることを意味する場合、これは有効な答えです。コマンドラインスイッチ、または使用するすべてのsettings.xmlファイルの修飾パスの明確なリストを提供するものについて知りたいと思っていました...そのようなメカニズムはおそらくないと思います。
harschware 2009

3
+1答え、クレタス。私はそれがあなたの「設定リファレンス」リンクから次の行を言及する価値があると思う:the former settings.xml are also called global settings, the latter settings.xml are referred to as user settings. If both files exists, their contents gets merged, with the user-specific settings.xml being dominant.
ケビン・メレディス

プライベートリポジトリを見つけるためにマシン固有の構成を用意する必要があることは、私にとって非常に苦痛です。これはJavaエコシステムの現状ですが、ひどく再現性のないビルドセットアップにつながります。
jpierson 2018

24

Mavenが必要なsettings.xmlを使用しているかどうかを判断するための簡単な方法は、そのxmlを無効にし、settings.xmlを必要とする安全なmavenコマンドを実行します。

この settings.xmlを読み取ると、Mavenは「settings.xmlの読み取りエラー...」というエラーを報告します。


3
Cletusの回答は非常に有益でしたが、この回答は私が探していたものよりも厳密に言えます(Maven自体にsettings.xmlファイルのレポートメカニズムが欠けているように見える)
harschware
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.