如何获取Maven本地仓库位置?

108

有没有办法获取Maven本地存储库的位置?

使用以下命令,您可以强制Maven使用特定的设置文件:

 mvn -s < path to settings file >
我知道你可以编辑 settings.xml 文件来设置存储库位置,但是我是否可以通过某些 Maven 命令获取当前默认值?
6个回答

176

如果你只想要本地仓库,请尝试以下操作:

mvn help:evaluate -Dexpression=settings.localRepository | grep -v '\[INFO\]'

编辑

我重新审视这个问题,因为最近的Maven帮助插件版本引入了一个有用的参数,用于evaluate目标,称为forceStdout,它允许我们无需使用grep命令来获取输出:

mvn help:evaluate -Dexpression=settings.localRepository -q -DforceStdout

2
我认为你的意图是 | grep -v '\[INFO\]'。你的正则表达式有不好的副作用。 - kubanczyk
两个版本对我都可以,你所说的“不良副作用”是什么意思? - adutra
3
您的正则表达式指定了一个匹配组,由大写字母I、N、F和O组成。因此,它将匹配这些行中的任何一个:INFO、OFNI、I、F、N等等。请尝试运行以下命令来验证:echo -e "INFO\nOFNI\nI\nIfoobar" | grep '[INFO]' - pmr
3
如果您有Maven警告或需要下载依赖项,则此方法将无法正常工作。以下grep,用于搜索绝对文件路径,应该适用于Unix和Windows系统:mvn help:evaluate -Dexpression=settings.localRepository | grep -E '^([a-zA-Z]:|/)' - SiXoS
@adutra...谢谢你。这些天我一直使用默认的仓库位置:${user.home}/.m2/repository或者$HOME/.m2/repository,并使用符号链接指向我选择的位置。不值得花费精力去追踪设置文件。现在我使用SDKMAN,所以使用默认设置非常简单。你帮助我找到了仓库的位置,所以我可以移动它。干得好! - will
显示剩余2条评论

58

是的,你可以使用-X--debug选项来获取它,例如:mvn -X

...
[DEBUG] Reading global settings from C:\Maven\conf\settings.xml
[DEBUG] Reading user settings from C:\segphault\.m2\settings.xml
[DEBUG] Using local repository at C:\Repo
...

46

Maven 帮助插件将显示本地设置,包括本地存储库路径。

您需要的命令是:

mvn help:effective-settings

输出将以 XML 格式显示设置。查找 localRepository 元素:

<localRepository xmlns="http://maven.apache.org/SETTINGS/1.1.0">/home/jrs/.mavenRepo</localRepository>

看起来如果它抛出警告,输出将不会是XML格式。 - Sajuuk

28

此时此刻,你可以以更简单的方式完成这个任务:

mvn help:evaluate -Dexpression=settings.localRepository -q -DforceStdout

你也可以直接使用以下内容将其分配给shell变量,如下所示:
RESULT=$(mvn help:evaluate -Dexpression=settings.localRepository -q -DforceStdout)

重要提示:使用最新版本的Maven和当然是最新版本的maven-help-plugin...

这将包含结果,没有换行等。


这个答案应该被接受,因为它提供了比迄今为止提出的任何其他解决方案都更清晰的解决方案。 - Zartc
1
这在某些平台/配置上是有问题的。对于我来说(fc 28,Maven 3.5.2),-q使其不产生输出,但是没有-q,该属性存在,但必须使用grep命令进行筛选。 - Pawel Veselov

7

针对Windows用户

通常路径为:C:\Users\USER_NAME\.m2\repository
然而,mvn help:effective-settings 命令会在响应的xml中显示本地路径。


1
更一般的说法是:${user.home}/.m2/repository 是默认设置,可以在 settings.xml 中进行覆盖。 mvn help:effective-settings 在此之前已经在这里的一个答案中提到了超过6年:https://dev59.com/uG025IYBdhLWcg3wl3Em#6670563。 - Gerold Broser

6

它应该在/home/.m2目录中,该文件夹可能是隐藏的。因此,您需要按Ctrl + H以查看隐藏文件夹。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接