【问题标题】:Can the default path to user's install settings.xml (${user.home}/.m2/settings.xml) be changed?可以更改用户安装 settings.xml (${user.home}/.m2/settings.xml) 的默认路径吗?
【发布时间】:2016-11-15 02:42:30
【问题描述】:

在没有 pom.xml 的项目之外,是否可以始终更改 Maven 期望用户设置的位置?例如,从用户主目录中的终端窗口?

我已经阅读了好几天,但在 apache 网站、谷歌或这里找不到答案。在https://maven.apache.org/settings.html 它说:

settings.xml 文件可能存在两个位置:

The Maven install: ${maven.home}/conf/settings.xml
A user’s install: ${user.home}/.m2/settings.xml

我想更改我机器上 Maven 安装/程序的实际配置以在其他地方查找用户的设置,始终:/home/userFoo/bin/maven.config.directory/settings.xml 而不是 /home/userFoo/.m2/settings.xml

settings.xml 文件说:

<!--
 | This is the configuration file for Maven. It can be specified at two levels:
 |
 |  1. User Level. This settings.xml file provides configuration for a single user,
 |                 and is normally provided in ${user.home}/.m2/settings.xml.
 |
 |                 NOTE: This location can be overridden with the CLI option:
 |
 |                 -s /path/to/user/settings.xml

但是当我运行那个命令时, mvn -s /home/userFoo/bin/maven.config.directory/settings.xml 我得到了很多错误。

【问题讨论】:

  • 不清楚您在问什么:1. 您是否要指定自定义设置的路径(因此使用-s 选项),同时仍将${user.home}/.m2/settings.xml 保持为默认值(即不使用-s)? 2. 或者您是否想覆盖该默认设置,以便 Maven 始终考虑您的新设置而无需任何 -s 声明?
  • 我想覆盖 Maven 在哪里寻找用户定义的设置:而不是 ${user.home}/.m2/settings.xml 告诉 Maven 总是在新位置寻找用户定义的设置。我会编辑问题,谢谢!
  • 没有真正的好方法可以做到这一点。最简单的选择是像您一样使用符号链接,或者为始终附加 -s ...mvn 脚本创建别名,例如 alias mvn='mvn -s ...'
  • 你可以设置MAVEN_OPTS覆盖JVM中的user.homeexport MAVEN_OPTS=-Duser.home=/home/userFoo/bin/maven.config.directory

标签: maven


【解决方案1】:

您可以设置MAVEN_OPTS 环境变量以覆盖JVM 中的user.home

export MAVEN_OPTS=-Duser.home=/home/userFoo/bin/maven.config.directory
# do something with Maven
mvn dependency:list

或视窗

set MAVEN_OPTS=-Duser.home=D:\home\userFoo\bin\maven.config.directory
:: do something with Maven
mvn dependency:ist

您还可以将MAVEN_OPTS 添加到您的 .bashrc、.profile 或 Windows 环境中。

【讨论】:

    【解决方案2】:

    您可以尝试使用命令:

    mvn --settings /home/userFoo/bin/maven.config.directory/settings.xml archetype:generate
    

    您可以通过检查命令的输出来验证您的自定义设置文件是否正在加载:

    mvn --settings /home/userFoo/bin/maven.config.directory/settings.xml help:effective-settings
    

    如果您希望从共享位置加载,甚至可以更改默认全局设置文件位置,方法是在目标之前附加上述命令:

    --global-settings /${shared.location}/settings.xml
    

    您可能还想为命令创建一个别名,以防您不想每次都输入它。

    【讨论】:

    • 非常感谢您的回答。当我尝试此操作时,CLI 显示:[错误] 您指定的目标需要执行项目,但此目录 (/home/userFoo) 中没有 POM。请确认您从正确的目录调用了 Maven。
    • 这是否意味着运行“mvn -s”命令或“mvn -gs”命令我必须有一个 pom.xml 文件来运行这些命令?我认为设置命令就像更改任何其他程序的设置,而不是特定于项目/构建的设置。也许这是我出错的地方?
    • 我已更新答案以使用可帮助您创建新项目的目标。目标“archetype:generate”只是一个简单的示例,因为它不需要任何现有项目,并且可以在空白目录中执行。您可以使用任何其他目标,例如打包或安装。
    • 同样可以使用您之前的“mvn -s”以及“mvn -gs”命令来实现。如果您使用“archetype:generate”或任何 help:**** 目标,则不需要 POM,因为它们不依赖于任何现有项目
    • 感谢您的回答。 .m2 路径相对于用户主文件夹,该文件夹以独立于平台的方式检索,这也是遇到基于文件的权限问题的可能性最小的文件夹。但是您可以通过在 mvn 命令行中通过参数“-Duser.home”显式指定位置来覆盖环境变量来覆盖该位置。请注意,这会导致该 mvn 运行时中的所有其他 java 类将新路径解释为用户主目录,这可能会产生意想不到的后果。
    【解决方案3】:

    把它放在这里是因为这是我让它工作的唯一方法,但感觉不对:

    在 ${user.home}/.m2/settings.xml 建立一个软链接:

    ln -s ~/.m2/settings.xml ~/bin/maven.config.directory/settings.xml
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-01
      • 2017-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多