如何永久指定.m2文件夹或settings.xml的备用位置?

Pat*_*tan 58 maven

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

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

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

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

Pet*_*sik 74

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

<localRepository>C:\Users\me\.m2\repo</localRepository>
Run Code Online (Sandbox Code Playgroud)

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

  • 我已经提到我没有对默认 .m2 存储库的写访问权限。 (2认同)

TWi*_*Rob 50

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

有一些解决方法出现在我的脑海中,可以帮助使用任意的,C:\redirected\settings.xml并且从未像往常一样快乐地使用mvn命令.

mvn 别号

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

alias mvn='mvn --global-settings "C:\redirected\settings.xml"'
Run Code Online (Sandbox Code Playgroud)

所以当你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" %*
    
    Run Code Online (Sandbox Code Playgroud)

注意:如果您希望某些项目的行为不同,您可以mvn.bat在同一文件夹中创建,pom.xml当您运行plain时,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=...
Run Code Online (Sandbox Code Playgroud)

mvn.sh

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

${CLASSWORLDS_LAUNCHER} "$@"
Run Code Online (Sandbox Code Playgroud)

部分到

${CLASSWORLDS_LAUNCHER} --global-settings "C:\redirected\settings.xml" "$@"
Run Code Online (Sandbox Code Playgroud)

建议/咆哮

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

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

  • 赞成两个"有趣"的段落.事实不仅有趣,这是荒谬的.. (5认同)
  • 嗯,就我个人而言,我在这里寻找不显眼地劫持动态签出项目的安装的方法,而且我不想_想要_编辑 settings.xml。此外,如果组织允许用户携带自己的设备或雇用承包商,最好自动强制使用不同的 settings.xml,而不是依赖用户正确设置它(例如,避免意外将闭源 jar 部署到开源存储库)。 (2认同)

Par*_*uti 17

以下是默认情况下Maven_Home\conf\settings.html中Maven软件中的配置.

<settings>
  <!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ~/.m2/repository
  <localRepository>/path/to/local/repo</localRepository>
  -->
Run Code Online (Sandbox Code Playgroud)

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

<localRepository>custom_path</localRepository>
Run Code Online (Sandbox Code Playgroud)

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


小智 7

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

添加修改此行

m2.conf

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


Dra*_*gas 5

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

请参阅:Settings.xml文档

  • [文档](https://maven.apache.org/ref/3.8.2/maven-model-builder/index.html) 其中提到了“maven.repo.local”。 (2认同)