ChatGPT解决这个技术问题 Extra ChatGPT

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

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


e
elek

使用 -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
...

(原来的目录名被我删除了)


也许这在 maven 3 发布之前不在调试输出中,但大约 2.5 年后你的帖子终于是我正在寻找的确切答案(抱歉延迟了 6 个月才注意到它)。
我使用的 maven 版本 maven2.x 在使用 -B 标志时没有显示这个重要的细节。 ...不幸的是,如果您尝试调试 Jenkins 服务器的情况。
我从 mvn -X 得到了很多输出,它们很快滚动到缓冲区之外(在 Windows 上)。通过使用 mvn -X |more 解决,然后按 CTRL+C 结束输出。
M
Manuel Jordan

您对 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 对象。


如果我们可以提供多个用户的 settings.xml,那就太好了,例如,我们可以将它们用于不同的项目。我知道我们可以使用个人资料。但是如果有一个单独的文件会更好。不可能吧?!干杯!
我正在寻找一种解决方案,只需一次覆盖我的用户设置,而不必篡改文件。所以我只是使用全局文件进行用户设置。即 --settings c:\global\settings.xml 这样用户文件就被省略了
@despot,迟到了,但在某种程度上,您可以通过定义的多个配置文件和一些自定义“触发器”:maven.apache.org/settings.html#Activation
它总是要求当前文件夹中的 pom。 “您指定的目标需要执行项目,但此目录 (/) 中没有 POM。请验证您从正确的目录调用 Maven。-> [帮助 1]”
s
serg10

您可以使用 maven help plugin 告诉您用户和全局设置文件的内容。

mvn help:effective-settings

将要求 maven 吐出组合的全局和用户设置。


它有助于我将旧的 Maven 存储库 repo1.maven.org/maven2 更新为 search.maven.org
f
firstthumb

这是 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,而不是 maven.home
没关系。如果使用 maven.home 设置环境变量,不会有问题
c
cletus

全局变量的 M2_HOME 环境变量。请参阅Settings Reference

settings.xml 文件中的 settings 元素包含用于定义以各种方式配置 Maven 执行的值的元素,例如 pom.xml,但不应捆绑到任何特定项目或分发给受众。其中包括本地存储库位置、备用远程存储库服务器和身份验证信息等值。 settings.xml 文件可能存在两个位置: Maven 安装:$M2_HOME/conf/settings.xml 用户安装:${user.home}/.m2/settings.xml


如果此答案暗示仅通过检查环境来确定存储库,那么这是一个有效的答案。我希望了解命令行开关或为所有使用的 settings.xml 文件提供合格路径的明确列表的东西......我认为可能没有这样的机制。
+1 答案,克莱图斯。我认为值得一提的是“设置参考”链接中的下一行: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.
需要有特定于机器的配置才能找到私有存储库,这让我非常痛苦。我意识到这是 Java 生态系统的现状,但它会导致非常不可重现的构建设置。
t
topchef

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

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


虽然 Cletus 的回答提供了非常丰富的信息,但从最严格的意义上讲,这个答案更多的是我正在寻找的(鉴于 Maven 本身似乎缺乏任何 settings.xml 文件报告机制)
A
Anand Varkey Philips

如果您像我一样调试并浪费时间,这将提供包括密码在内的确切详细信息。 :P

mvn help:effective-settings -DshowPasswords=true