将Maven的本地存储库位置指定为CLI参数


131

是否可以在Maven命令行上将本地Maven存储库的位置设置为参数?

问题是我没有使用中的默认值~/.m2/repository。但是,我检出了一些使用自己的设置构建的项目-s settings.xml。该settings.xml没有指定我的本地存储库,因此Maven ~/.m2/repository再次使用用途...我想使用非默认本地存储库位置,而不必<localRepository>在项目的settings.xml中添加元素

我试过了

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

但这些选项均无效。

所以我认为我必须决定是要修改第三方settings.xml还是将本地存储库移至 ~


显然这不是您的错,但是Maven项目不应该提供settings.xml。见maven.apache.org/guides/mini/guide-configuring-maven.html
oberlies

Answers:


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

3
在Windows上使用`MVN -D “maven.repo.local”=%USER_HOME%/我的/其它/仓库里面干净的安装`
伊戈尔Bljahhin

我可以设置环境变量来实现相同的功能吗?
powder366

@ powder366 no,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. 添加<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上都可以那样工作,但是测试可以证明这一点。)

这没有帮助,我在mvn脚本中的“ $ @”之前添加了-Dm2.localRepository =“ custom”,仍然使用〜/ .m2 / repository ...然后在运行时还添加了-Dm2.localRepository =“ custom” $ mvn,仍然使用〜/ .m2 / repository ...仅在settings.xml中没有localRepository元素,无法更改它
lisak 2011年

@lisak:您是否执行了将localRepository元素添加到settings.xml的步骤1?我对此进行了测试,但除了不能在mvn脚本中实际使用'〜'别名之外,它均有效。您必须输入绝对路径,尽管您可能可以做一些其他的shell / batch脚本技巧来解决此问题。
瑞安·斯图尔特

它可以工作,但是我真的没有解释...如果我在不执行步骤2的情况下在$ M2_HOME / conf / settings.xml中声明localRepository,则尽管它在步骤2中被-s settings.xml覆盖,但它不起作用它可以工作...但是只有$ M2_HOME / conf / settings.xml中没有localRepository的第2步不起作用...必须同时执行第1,2步,我才能通过$ mvn更改位置-Dm2.localRepository = ..谢谢Ryan
lisak 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.