gpt4 book ai didi

maven-2 - Maven 在调用时不会替换 'settings.xml' 中的变量

转载 作者:行者123 更新时间:2023-12-04 05:27:39 27 4
gpt4 key购买 nike

我在 settings.xml 文件中为所有存储库定义了一个本地镜像:

<mirror>
<id>myMirror</id>
<mirrorOf>*</mirrorOf>
<url>file://${mypath}/maven/.m2/repository</url>
</mirror>

我希望我的镜像指向本地路径,在这种情况下,路径是:
file://${mypath}/maven/.m2/repository

其中 ${mypath} 是我调用 Maven 时传递的变量:
 mvn -Dmypath="/D:/test" package

问题是Maven在调用时不会替换变量。通过检查构建日志,我可以看到此错误正在发生。例如,Maven 报告它正在从 file://${mypath}/maven/.m2/repository 下载文件,而正确的是 file:///D:/test/maven/.m2/repository。

我还注意到,当我的变量插入存储库标签的 url 子标签时,Maven 会正确替换它:
<repository>
<id>central</id>
<url>http://${mypath}/maven/.m2/repository</url>
</repository>

当我用完整的 URL 替换 settings.xml 中的变量时,构建工作正常,如下例所示:
<mirror>
<id>myMirror</id>
<mirrorOf>*</mirrorOf>
<url>file:///D:test/maven/.m2/repository</url>
</mirror>

最佳答案

属性替换到 settings.xml 不能像您期望的那样工作。

它将替换配置文件元素内的属性(如您所见,它将替换为您的存储库 URL,该 URL 将在配置文件内定义),但不会替换配置文件之外的元素(如您在镜像部分看到的那样)。此 distinction是因为 settings.xml 中的 profile 元素是 pom.xml profile 元素的截断版本。这是一种允许将配置设置到 POM 中的机制,因此允许在配置文件元素中进行属性替换,因为它们实际上是 POM 的一部分。

配置文件元素之外的设置部分代表平台配置,这些部分不应受单个构建的影响,因此不会替代命令行属性。这是有道理的,但在任何地方都没有真正明确。

编辑:the settings page在 mavens 文档中,在快速概述部分(非常隐蔽)的最后一句中,它指出:

Note that properties defined in profiles within the settings.xml cannot be used for interpolation.



不过有一个解决方法,您可以将环境变量替换到 settings.xml 中。如果设置环境变量:
set M2_MIRROR=D:\test

并按如下方式配置存储库 url:
<url>file://${M2_MIRROR}/maven/.m2/repository</url>

然后正常调用 Maven,替换环境变量,您的构建应该按要求工作。

关于maven-2 - Maven 在调用时不会替换 'settings.xml' 中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1363514/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com