2011-07-25 124 views
82

是否可以設置本地Maven倉庫作爲Maven的命令行參數的位置?指定Maven的本地倉庫的位置爲CLI參數

的事情是,我不使用默認的一個在~/.m2/repository。不過,我用-s settings.xml檢查了一些正在使用自己的設置構建的項目。這settings.xml中沒有指定我的本地庫,所以Maven使用用途~/.m2/repository一次...我想使用非默認的本地存儲庫位置,而不必在項目的settings.xml中添加<localRepository>元素

我試過

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

但這些選項都不起作用。

所以我覺得我必須決定自己是否會被修改第三方的settings.xml或移動我的本地回購協議~

+0

顯然,這不是你的錯,但Maven項目不應提供'settings.xml'。見http://maven.apache.org/guides/mini/guide-configuring-maven.html – oberlies

回答

168

使用Maven屬性maven.repo.local

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

沒有修改的Settings.XML是必要的。

+1

本地存儲庫必須是絕對路徑,https://maven.apache .ORG /引導/小型/引導配置,maven.html。 – luka5z

+0

在Windows上使用 ' mvn -D「maven.repo.local」=%USER_HOME%/。my/other/repository clean install ' –

2

一種將工作哈克的方式是:

  1. 添加<localRepository>${m2.localRepository}</localRepository> to your 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這種方式,但測試會告訴我們。)
+0

這並沒有幫助,我加-Dm2.localRepository =「定製」前的「$ @」到MVN腳本,仍然使用〜/ .m2目錄/庫...然後我也包含-Dm2.localRepository =「自定義」運行$ MVN時,仍然使用〜/ .m2目錄/庫...不只是在settings.xml localRepository元素,沒有改變它的方法 – lisak

+0

@lisak:你是否將localRepository元素添加到settings.xml中?我測試了這個,它的工作原理,除了你實際上不能在mvn腳本中使用'〜'別名。你必須放入絕對路徑,儘管你可能會做一些其他的shell /批處理腳本欺騙來解決這個問題。 –

+0

它的工作原理,但我真的沒有解釋...如果我在$ M2_HOME/conf/settings中聲明localRepository。xml沒有第2步,它被-s settings.xml重寫並且不起作用,儘管步驟2它可以工作......但是隻有第2步沒有在$ M2_HOME/conf/settings.xml中的localRepository不起作用。 。步驟1,2必須申請它的工作,我甚至可以通過$ mvn -Dm2.localRepository =來更改位置。..謝謝瑞安 – lisak

1

對於混帳:

alias mvn='mvn -Dmaven.repo.local=`git rev-parse --show-toplevel`/.m2/repository' 

它使用一個單獨的Maven倉庫中的每個git倉庫