如何为.m2文件夹或settings.xml永久指定替代位置?


69

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

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

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

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


1
您可以使用-GS在命令行选项来设置的settings.xml路径(books.sonatype.com/mvnref-book/reference/...
yodamad

@yodamad。感谢您的答复。我收到错误消息,因为“未指定目标”。我的目标是确保对于每个构建,都应采用自定义setings.xml,而不是针对特定构建。你能告诉我如何做到这一点。
Patan

我正在运行脚本文件,因此我想使它对所有人通用。
Patan

也可以从命令行,例如:stackoverflow.com/questions/6823462/…–
rogerdpack

Answers:


89

您需要将此行添加到您的行中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


谢谢你的回答。我收到错误消息,因为“未指定目标”。我的意图是确保对于每个构建,都应采用自定义setings.xml,而不是特定构建。你能告诉我如何做到这一点。
Patan

2
我已经提到我没有对默认.m2存储库的写访问权。
Patan

如果要.m2全局设置其他位置,则需要修改$HOME/.m2/settings.xml,但我不知道还有其他方法可以实现此目的。
Petr Mensik

对于第一个问题,您的命令是什么?尝试在我的输入法中编辑一个命令。
Petr Mensik

对我来说,这没有用。我还必须将settings.xml复制到默认目录中,以使其正常运行(C:\ Users \ MYNAME \ .m2)
TeaTime

53

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

有迹象表明,我想起了几个解决方法,可以帮助使用任意C:\redirected\settings.xml并且使用mvn命令如常后幸福快乐的日子。

mvn 别名

在Unix Shell中(或在Cygwin上),您可以创建

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

因此,当您mvn blah blah从任何地方调用配置时,都会“自动”进行配置。
请参阅如何在中创建别名cmd如果您想这样做,但没有Unix shell。

mvn 包装纸

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

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

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

注意:如果您希望某些项目的行为有所不同,则可以mvn.bat在与该文件夹相同的文件夹中进行创建,pom.xml这样在纯运行时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 骇客

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

${CLASSWORLDS_LAUNCHER} "$@"

一部分

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

建议/租金

作为IT部门的人,您无法访问自己的主文件夹很可笑,对我来说,这构成了您所在公司的能力不足:这等同于雇用某人进行软件开发,但甚至没有提供可以使用notepad.exe或Microsoft Word以外的任何其他文件来编辑源文件。我建议与您的服务台或管理员联系,并要求至少对该特定文件具有写权限,以便您可以更改本地存储库的路径。

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


2
好吧,就我个人而言,我在这里寻找用于动态检出项目的毫不干扰地劫持安装的方法,并且我不想编辑settings.xml。此外,如果组织允许用户携带自己的设备或雇用承包商,则最好强行自动使用其他settings.xml,而不是依靠用户正确地设置它(例如,避免意外地将封闭源jar部署到开放源存储库中)。
阿贾克斯

23

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

请参阅:Settings.xml文档


18

以下是MAVEN_HOME \ conf \ settings.xml中默认情况下Maven软件中的配置。

<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>

例如: <localRepository>D:/MYNAME/settings/.m2/repository</localRepository>


8

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

添加修改此行

m2.conf

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.