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

如何使用maven命令行来确定Maven正在拾取哪个settings.xml文件?

用-X选项(debugging)启动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 ... 

(原始目录名称被我删除)

您对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将文件位置注入已parsing的Settings对象。

你可以使用Maven的帮助插件告诉你的用户和全局设置文件的内容。

 mvn help:effective-settings 

将要求maven吐出全球和用户的综合设置

这是Maven的configuration文件。 它可以分为两个层次:

  1. 用户级别。 这个settings.xml文件为单个用户提供configuration,通常在$ {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用户提供configuration(假设他们都使用相同的Maven安装)。 它通常在$ {maven.home} /conf/settings.xml中提供。

      NOTE: This location can be overridden with the CLI option: -gs /path/to/global/settings.xml 

全局的M2_HOME环境variables。 请参阅设置参考 :

settings.xml文件中的settings元素包含用于定义以各种方式configurationMaven执行的值的元素,比如pom.xml ,但是不应该绑定到任何特定的项目或分发给受众。 其中包括本地存储库位置,备用远程存储库服务器和身份validation信息等值。 有两个位置可能存在一个settings.xml文件:

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

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

如果它读取这个 settings.xml,那么Maven报告一个错误: “Error reading settings.xml …”