【问题标题】:Maven command to determine which settings.xml file Maven is using确定 Maven 正在使用哪个 settings.xml 文件的 Maven 命令
【发布时间】:2010-11-18 16:10:04
【问题描述】:

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

【问题讨论】:

    标签: maven command-line maven-2 settings


    【解决方案1】:

    M2_HOME 全局环境变量。见Settings Reference

    settings 元素在 settings.xml 文件包含元素 用于定义配置的值 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 生态系统的现状,但它会导致构建设置非常不可重现。
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 属性是M2_HOME,不是maven.home
    • 没关系。如果使用maven.home设置环境变量就没有问题了
    【解决方案4】:

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

    如果它读取 this settings.xml 则 Maven 报告错误:“Error reading settings.xml...”

    【讨论】:

    • 虽然 Cletus 的回答提供了很多信息,但从最严格的意义上说,这个答案更多的是我正在寻找的(鉴于 Maven 本身似乎缺乏任何 settings.xml 文件报告机制)
    【解决方案5】:

    使用 -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 结束输出。
    【解决方案6】:

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

    mvn help:effective-settings
    

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

    【讨论】:

    【解决方案7】:

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

    mvn help:effective-settings -DshowPasswords=true
    

    【讨论】:

      猜你喜欢
      • 2012-04-16
      • 2015-11-28
      • 1970-01-01
      • 2014-10-06
      • 2016-07-25
      • 1970-01-01
      • 2012-04-19
      • 2020-06-05
      • 1970-01-01
      相关资源
      最近更新 更多