Maven命令确定Maven正在使用哪个settings.xml文件


Answers:


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才在debug输出中,但是2.5年后的您的帖子终于是我一直在寻找的确切答案(对不起,六个月的通知时间)。
harschware,2012年

当使用-B标志时,我正在使用的Maven版本maven2.x没有显示此重要详细信息。...不幸的是,如果您要调试Jenkins服务器正在发生的情况。
Cognitiaclaeves

168

您对cletus的(正确)答案的评论表明,其中涉及多个Maven设置文件。

Maven始终使用一个或两个设置文件。始终需要($ {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
。-


40

这是Maven的配置文件。可以在两个级别上指定它:

  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
该属性是M2_HOME,而不是maven.home
Rich Seller

没关系 如果使用maven.home设置环境变量,则不会有问题
firstthumb

24

M2_HOME全局变量的环境变量。请参阅设置参考

文件中的元素包含用于定义值的settings元素,这些 settings.xml值以各种方式配置Maven执行,例如pom.xml,但不应捆绑到任何特定项目或分发给受众。其中包括诸如本地存储库位置,备用远程存储库服务器和身份验证信息之类的值。settings.xml文件可能存在两个位置:

  • Maven安装: $M2_HOME/conf/settings.xml
  • 用户的安装: ${user.home}/.m2/settings.xml

如果此答案意味着仅通过检查环境来确定存储库,则这是有效的答案。我希望了解命令行开关或某些东西,它给出了所使用的所有settings.xml文件的合格路径的明确列表。我认为可能没有这种机制。
harschware

3
+1答案,Cletus。我认为值得一提的是您的“设置参考”链接中的下一行: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.
Kevin Meredith 2014年

需要具有特定于机器的配置来查找私有存储库的需求令我非常痛苦。我意识到这是Java生态系统中的现状,但它导致了无法复制的构建设置。
jpierson

24

确定Maven是否正在使用所需的settings.xml的快速而肮脏的方法将使其XML无效,并运行一些需要settings.xml的安全maven命令。

如果读取 settings.xml,则Maven报告错误:“读取settings.xml ...时出错”。


3
尽管Cletus的回答非常有帮助,但是从最严格的意义上来说,这个回答更是我想要的(鉴于Maven本身似乎缺少任何settings.xml文件报告机制)
harschware
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.