Mavenのローカルリポジトリの場所をCLIパラメーターとして指定する


131

ローカルのMavenリポジトリの場所をMavenコマンドラインの引数として設定することは可能ですか?

事は私がでデフォルトのものを使用しないことです~/.m2/repository。ただし、独自の設定でビルドされているプロジェクトをでチェックアウトしました-s settings.xml。そのsettings.xmlは私のローカルリポジトリを指定しないので、Mavenはusesを~/.m2/repository再び使用します... <localRepository>プロジェクトのsettings.xmlに要素を追加する必要なしにデフォルト以外のローカルリポジトリの場所を使用したいと思います

私はもう試した

  • -DlocalRepository="..."
  • $mvn invoker:run -s settings.xml clean install -DskipTests -DlocalRepositoryPath=
  • -Dsettings.localRepository

しかし、これらのオプションはどれも機能しません。

サードパーティのsettings.xmlを変更するか、ローカルリポジトリをに移動するかを決定する必要があると思います ~


明らかにこれはあなたの責任ではありませんが、Mavenプロジェクトはを提供すべきではありませんsettings.xmlmaven.apache.org/guides/mini/guide-configuring-maven.htmlを
oberlies

回答:


258

mavenプロパティを使用maven.repo.local

mvn -Dmaven.repo.local=$HOME/.my/other/repository clean install

の変更settings.xmlは必要ありません。


10
ローカルリポジトリは、絶対パスmaven.apache.org/guides/mini/guide-configuring-maven.htmlである必要があります。
luka5z 2016

3
Windowsでは、 `mvn -D" maven.repo.local "=%USER_HOME%/。my / other / repository clean
install`を使用し

同じことを達成するために環境変数を設定できますか?
powder366

@ powder366いいえ、AFAIK
Petr Kozelka

maven-3.6.3を使用すると、ローカルリポジトリのディレクトリは相対パスとして機能します(少なくともMacOSでは)
Ed Randall

8

gitの場合:

alias mvn='mvn "-Dmaven.repo.local=$(git rev-parse --show-toplevel)/.m2/repository"'

これは、各gitリポジトリで個別のmavenリポジトリを使用します


2

機能するハックな方法の1つは次のとおりです。

  1. <localRepository>${m2.localRepository}</localRepository>settings.xmlに追加
  2. mvn.shまたはmvn.batで、実行されるコマンドの「$ @」の-Dm2.localRepository=<full path to home dir>/.m2/repository に追加します。これにより、デフォルトのローカルリポジトリが本来あるべき場所に留まります。
  3. これでを使用できますmvn -Dm2.localRepository=... <phases/goals>。コマンドラインシステムプロパティは、mvnスクリプトのコマンドラインの後にコマンドラインに追加されるため、優先されます。(少なくとも私はそれがWindowsとLinuxの両方でそのように動作すると確信していますが、テストでわかります。)

それは役に立たない、 "$ @"の前に-Dm2.localRepository = "custom"をmvnスクリプトに追加しましたが、それでも〜/ .m2 / repositoryを使用します...そして、実行時に-Dm2.localRepository = "custom"も含めました$ mvn、まだ〜/ .m2 / repositoryを使用しています... settings.xmlにlocalRepository要素がないと、それを変更する方法はありません
lisak

@lisak:localRepository要素をsettings.xmlに追加するステップ1を実行しましたか?私はこれをテストしましたが、mvnスクリプトで実際に「〜」エイリアスを使用できないことを除いて、機能します。絶対パスを入力する必要がありますが、それを回避するためにおそらく他のシェル/バッチスクリプトのトリックを実行することができます。
ライアンスチュワート

それは機能しますが、私は本当に説明がありません...ステップ2なしで$ M2_HOME / conf / settings.xmlでlocalRepositoryを宣言すると、-s settings.xmlによってオーバーライドされ、ステップ2では機能しませんそれは機能します...しかし、$ M2_HOME / conf / settings.xmlにlocalRepositoryがないステップ2だけが機能しません...それが機能するためには両方のステップ1、2を適用する必要があり、$ mvnを使用して場所を変更することもできます-Dm2.localRepository = ..おかげでライアン
lisak
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.