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

Maven命令,以确定Maven正在使用哪个settings.xml文件,maven,command-line,maven-2,settings,Maven,Command Line,Maven 2,Settings,如何使用maven命令行确定maven正在接收哪些settings.xml文件?全局设置的环境变量为M2\u HOME。见: 中的设置元素 settings.xml文件包含元素 用于定义用于配置的值 Maven以各种方式执行,如 pom.xml,但不应 捆绑到任何特定项目,或 分发给观众。这些 包括值,例如本地 存储库位置,备用远程 存储库服务器和身份验证 信息。有两个地点 settings.xml文件可能存在的位置: Maven安装:$M2_HOME/conf/settings.xml 用户

如何使用maven命令行确定maven正在接收哪些settings.xml文件?

全局设置的环境变量为
M2\u HOME
。见:

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

  • Maven安装:
    $M2_HOME/conf/settings.xml
  • 用户安装:
    ${user.home}/.m2/settings.xml
您对cletus(正确)答案的评论意味着涉及多个Maven设置文件

Maven始终使用一个或两个设置文件。始终需要(${M2_HOME}/conf/settings.xml)中定义的全局设置。用户设置文件(在${user.home}/.m2/settings.xml中定义)是可选的。用户设置中定义的任何设置优先于相应的全局设置

您可以从命令行覆盖全局和用户设置的位置,以下示例将全局设置设置设置为c:\global\settings.xml,用户设置设置设置为c:\user\settings.xml:


目前没有任何属性或方法来确定Maven使用了哪些用户和全局设置文件。要访问这些值,您必须修改MavenCli和/或DefaultMavenSettingsBuilder,以将文件位置注入已解析的设置对象。

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

  • 用户级。此settings.xml文件为单个用户提供配置, 并且通常在${user.home}/.m2/settings.xml中提供

              NOTE: This location can be overridden with the CLI option:
    
              -s /path/to/user/settings.xml
    
              NOTE: This location can be overridden with the CLI option:
    
              -gs /path/to/global/settings.xml
    
  • 全球一级。此settings.xml文件提供所有Maven的配置 机器上的用户(假设他们都使用相同的Maven 安装)。它通常是在美国提供的 ${maven.home}/conf/settings.xml

              NOTE: This location can be overridden with the CLI option:
    
              -s /path/to/user/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命令


    如果它读取thissettings.xml,那么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
    ...
    
    (我将删除原始目录名)

    您可以使用来告诉您的用户和全局设置文件的内容

    mvn help:effective-settings
    

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

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

    mvn help:effective-settings -DshowPasswords=true
    

    如果这个答案意味着只有通过检查环境才能确定存储库,那么这是一个有效的答案。我希望了解一个命令行开关或其他东西,为所有使用的settings.xml文件提供一个限定路径的最终列表。。。我认为可能没有这样的机制。我认为值得一提的是“设置参考”链接的下一行:
    前面的Settings.xml也称为全局设置,后面的Settings.xml称为用户设置。如果这两个文件都存在,它们的内容就会合并,以user-specific settings.xml为主。
    需要特定于机器的配置才能找到私有存储库,这让我非常痛苦。我意识到这是Java生态系统中的现状,但它会导致非常不可生产的构建设置。如果您使用maven.home设置环境变量,则不会有问题虽然Cletus的答案非常有用,但从最严格的意义上讲,这个答案更符合我的要求(考虑到maven本身似乎缺少任何settings.xml文件报告机制),如果我们可以提供多个user's settings.xml,那就太好了,例如,我们可以在不同的项目中使用它们。我知道我们可以使用个人资料。但是如果有一个单独的文件就更好了。这是不可能的,对吧?!干杯我正在寻找一种解决方案,只覆盖我的用户设置一次,而不必篡改文件。所以我只是使用全局文件进行用户设置。即--settings c:\global\settings.xml通过这种方式获取用户文件omitted@despot,晚到派对,但在某种程度上,您可以通过定义的多个配置文件和一些自定义“触发器”:它总是要求当前文件夹中的pom。“您指定的目标需要执行一个项目,但此目录(/)中没有POM。请验证您是否从正确的目录调用了Maven。->[Help 1]“也许在Maven 3发布之前,调试输出中没有这一点,但大约2.5年后,您的帖子最终就是我想要的答案。”(很抱歉延迟了6个月才注意到这一点)。我使用的maven版本maven2.x在使用-B标志时没有显示这一重要细节……不幸的是,如果您试图调试Jenkins服务器的运行情况。我从
    mvn-x
    中获得了大量输出,它会快速滚动到缓冲区之外(在Windows上)。通过使用
    mvn-X | more
    代替CTRL+C结束输出来解决。这有助于我将旧的maven repo更新为