如何使用 maven 命令行来确定 Maven 正在拾取哪个 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
...
(原来的目录名被我删除了)
您对 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 help plugin 告诉您用户和全局设置文件的内容。
mvn help:effective-settings
将要求 maven 吐出组合的全局和用户设置。
这是 Maven 的配置文件。它可以在两个级别上指定:
用户级别。此 settings.xml 文件为单个用户提供配置,通常在 ${user.home}/.m2/settings.xml 中提供。注意:可以使用 CLI 选项覆盖此位置:-s /path/to/user/settings.xml 全局级别。这个 settings.xml 文件为机器上的所有 Maven 用户提供配置(假设他们都使用相同的 Maven 安装)。它通常在 ${maven.home}/conf/settings.xml 中提供。注意:可以使用 CLI 选项覆盖此位置:-gs /path/to/global/settings.xml
全局变量的 M2_HOME
环境变量。请参阅Settings Reference:
settings.xml 文件中的 settings 元素包含用于定义以各种方式配置 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.
确定 Maven 是否使用所需的 settings.xml 的快速而肮脏的方法将使其 xml 无效并运行一些需要 settings.xml 的安全 maven 命令。
如果它读取了这个 settings.xml,那么 Maven 会报告一个错误:“Error reading settings.xml...”
如果您像我一样调试并浪费时间,这将提供包括密码在内的确切详细信息。 :P
mvn help:effective-settings -DshowPasswords=true
不定期副业成功案例分享
mvn -X
得到了很多输出,它们很快滚动到缓冲区之外(在 Windows 上)。通过使用mvn -X |more
解决,然后按 CTRL+C 结束输出。