【发布时间】:2010-11-18 16:10:04
【问题描述】:
如何使用 maven 命令行来确定 Maven 拾取了哪个 settings.xml 文件?
【问题讨论】:
标签: maven command-line maven-2 settings
如何使用 maven 命令行来确定 Maven 拾取了哪个 settings.xml 文件?
【问题讨论】:
标签: maven command-line maven-2 settings
M2_HOME 全局环境变量。见Settings Reference:
settings元素在settings.xml文件包含元素 用于定义配置的值 Maven 以各种方式执行,例如pom.xml,但不应该是 捆绑到任何特定项目,或 分发给观众。这些 包括诸如本地的值 存储库位置,备用远程 存储库服务器和身份验证 信息。有两个位置 settings.xml 文件可能存在的位置:
- Maven 安装:
$M2_HOME/conf/settings.xml- 用户安装:
${user.home}/.m2/settings.xml
【讨论】:
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.
您对 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 对象。
【讨论】:
这是 Maven 的配置文件。它可以在两个级别上指定:
用户级别。此 settings.xml 文件为单个用户提供配置, 并且通常在 ${user.home}/.m2/settings.xml 中提供。
NOTE: This location can be overridden with the CLI option:
-s /path/to/user/settings.xml
全球级别。这个 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
【讨论】:
确定 Maven 是否使用所需的 settings.xml 的快速而肮脏的方法将使其 xml 无效并运行一些需要 settings.xml 的安全 maven 命令。
如果它读取 this settings.xml 则 Maven 报告错误:“Error reading settings.xml...”
【讨论】:
使用 -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
...
(原来的目录名被我删除了)
【讨论】:
mvn -X 得到了很多输出,这些输出快速滚动到缓冲区之外(在 Windows 上)。通过使用 mvn -X |more 解决,然后按 CTRL+C 结束输出。
【讨论】:
如果您像我一样调试并浪费时间,这将提供包括密码在内的确切详细信息。 :P
mvn help:effective-settings -DshowPasswords=true
【讨论】: