【问题标题】:How to specify an alternate location for the .m2 folder or settings.xml permanently?如何永久指定 .m2 文件夹或 settings.xml 的备用位置?
【发布时间】:2013-05-20 12:21:04
【问题描述】:

我使用的是 Maven 3.0,我的 .m2 文件夹位置是 C:\Users\me\.m2

但是,我没有对该文件夹的写入权限,但我想更改在 settings.xml 中定义的存储库位置。

由于访问受限,我无法编辑 settings.xml 来更改存储库位置。

如何在不编辑 C:\Users\me\.m2\conf\settings.xml 文件的情况下覆盖 settings.xml 的值 - 或更改 .m2 文件夹的默认位置?

【问题讨论】:

  • 可以在命令行中使用-gs选项设置settings.xml路径(books.sonatype.com/mvnref-book/reference/…)
  • @yodamad。感谢您的答复。我收到错误,因为“没有指定目标”。我的目标是确保对于每个构建,它应该采用自定义 settings.xml,而不是针对特定构建。你能告诉我如何做到这一点。
  • 我正在运行脚本文件,因此我想让它对所有人通用。
  • 命令行也可以,例如:stackoverflow.com/questions/6823462/…

标签: maven


【解决方案1】:

您需要将此行添加到您的 settings.xml 中(如果已经存在,请取消注释)。

<localRepository>C:\Users\me\.m2\repo</localRepository>

还可以使用mvn clean install -gs C:\Users\me\.m2\settings.xml 运行您的命令 - 此参数将强制 maven 使用不同的 settings.xml 然后是默认的(在 $HOME/.m2/settings.xml 中)

【讨论】:

  • 感谢您的回答。我收到错误,因为“没有指定目标”。我的目的是确保对于每个构建,它都应该采用自定义 settings.xml,而不是针对特定构建。你能告诉我如何做到这一点。
  • 我已经提到我没有对默认 .m2 存储库的写入权限。
  • 如果你想在全球范围内设置不同的.m2位置,那么你需要修改$HOME/.m2/settings.xml,我不知道有什么其他方法可以实现。
  • 第一个问题,你的命令是什么?试试我asnwer中的那个,我已经编辑过了。
  • 对我来说,仅此一项是行不通的。我还必须将 settings.xml 复制到默认目录中才能正常工作 (C:\Users\MYNAME\.m2)
【解决方案2】:

有趣的是,其他答案如何忽略您无法写入该文件的事实......

我想到了一些解决方法,它们可以帮助使用任意的C:\redirected\settings.xml像往常一样使用mvn 命令

mvn别名

您可以在 Unix shell(或 Cygwin)中创建

alias mvn='mvn --global-settings "C:\redirected\settings.xml"'

因此,当您从任何地方呼叫 mvn blah blah 时,配置会“自动”拾取。
如果你想要这个,请参阅 How to create alias in cmd?,但没有 Unix shell。

mvn包装器

配置您的环境,以便在命令行中键入 mvn 时将其解析为包装脚本:

  • 从您的PATH 中删除您的MVN_HOME/binM2_HOME/bin,这样mvn 将不再被解析。
  • 将文件夹添加到PATH(或使用现有文件夹)
  • 在该文件夹中创建一个包含内容的mvn.bat 文件:

    call C:\your\path\to\maven\bin\mvn.bat --global-settings "C:\redirected\settings.xml" %*
    

注意:如果您希望某些项目的行为有所不同,您可以在与 pom.xml 相同的文件夹中创建 mvn.bat,这样当您运行普通的 mvn 时,它会解析为本地项目。

随时使用where mvn来检查它是如何解决的,当你输入mvn时会运行第一个。

mvn.bat黑客

如果您对C:\your\path\to\maven\bin\mvn.bat 具有写入权限,请编辑文件并将set MAVEN_CMD_LINE_ARG 添加到:runm2 部分:

@REM Start MAVEN2
:runm2
set MAVEN_CMD_LINE_ARGS=--global-settings "C:\redirected\settings.xml" %MAVEN_CMD_LINE_ARGS%
set CLASSWORLDS_LAUNCHER=...

mvn.sh黑客

为了完整起见,您也可以通过更改exec "$JAVACMD" 命令来更改C:\your\path\to\maven\bin\mvn shell 脚本

${CLASSWORLDS_LAUNCHER} "$@"

部分到

${CLASSWORLDS_LAUNCHER} --global-settings "C:\redirected\settings.xml" "$@"

建议/咆哮

作为一名 IT 人员,您无法访问自己的主文件夹,这很有趣,对我来说,这构成您所在公司的无能:这相当于雇用某人进行软件开发,但是甚至无法使用 notepad.exe 或 Microsoft Word 以外的任何工具来编辑源文件。我建议联系您的服务台或管理员,并请求至少对该特定文件的写入权限,以便您可以更改本地存储库的路径。

免责声明:这些都没有针对这个特定的用例进行测试,但我之前成功地将它们全部用于其他各种软件。

【讨论】:

  • 好吧,就我个人而言,我在这里寻找不显眼地劫持动态签出项目的安装的方法,我不想想要编辑 settings.xml。此外,如果组织允许用户携带自己的设备或雇用承包商,最好自动强制使用不同的 settings.xml,而不是依靠用户正确设置(例如,避免将封闭源 jar 意外部署到开源存储库)。
【解决方案3】:

没有人建议这样做,但是您可以使用-Dmaven.repo.local 命令行参数来更改存储库的位置。另外,根据settings.xml文档,可以设置-Dmaven.home在哪里查找settings.xml文件。

见:Settings.xml documentation

【讨论】:

  • docs 其中提到了maven.repo.local
【解决方案4】:

下面是Maven软件默认配置在MAVEN_HOME\conf\settings.xml中。

<settings>
  <!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ~/.m2/repository
  <localRepository>/path/to/local/repo</localRepository>
  -->

在此配置下添加以下行,将满足要求。

<localRepository>custom_path</localRepository>

例如:&lt;localRepository&gt;D:/MYNAME/settings/.m2/repository&lt;/localRepository&gt;

【讨论】:

    【解决方案5】:

    您可以在 m2.conf 文件中更改 .m2 目录的默认位置。它位于您的 Maven 安装目录中。

    中添加修改这一行

    m2.conf

    set maven.home C:\Users\me\.m2

    【讨论】:

      【解决方案6】:

      您可以在部署项目时指向different-settings.xml。当从项目文件夹中部署时,你可以有一个相对路径回到你的主文件夹

      mvn clean deploy -s ../../.m2/different-settings.xml
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-05
        • 1970-01-01
        • 2013-01-18
        • 1970-01-01
        • 1970-01-01
        • 2021-08-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多