如何更新Maven POM中的属性?
我有两个顶级Maven项目,如何更新Maven POM中的属性?,maven,pom.xml,versions-maven-plugin,Maven,Pom.xml,Versions Maven Plugin,我有两个顶级Maven项目,后端和前端,它们以各自的速度推进版本。由于每个模块都有多个模块,因此我在父级/聚合POM的dependencyManagement部分中定义依赖项版本,并使用一个属性作为版本号 我想在前端上用版本号干净地更新属性,最好是任意更新,但我可以接受需要实时上游版本来匹配的情况。我尝试过使用,但这个目标似乎完全没有功能;无论是否存在匹配的上游版本,我都会得到以下调试输出: $ mvn versions:update-property -Dproperty=frontend.v
后端
和前端
,它们以各自的速度推进版本。由于每个模块都有多个模块,因此我在父级/聚合POM的dependencyManagement
部分中定义依赖项版本,并使用一个属性作为版本号
我想在前端
上用版本号干净地更新属性,最好是任意更新,但我可以接受需要实时上游版本来匹配的情况。我尝试过使用,但这个目标似乎完全没有功能;无论是否存在匹配的上游版本,我都会得到以下调试输出:
$ mvn versions:update-property -Dproperty=frontend.version -DnewVersion=0.13.2 -DautoLinkItems=false -X
...
[DEBUG] Searching for properties associated with builders
[DEBUG] Property ${frontend.version}
[DEBUG] Property ${frontend.version}: Looks like this property is not associated with any dependency...
[DEBUG] Property ${frontend.version}: Set of valid available versions is [0.9.0, 0.9.1, 0.9.2, 0.9.3, 0.9.4, 0.9.5, 0.10.0, 0.10.1, 0.11.0, 0.12.0, 0.13.0, 0.13.1, 0.13.2, 0.13.3]
[DEBUG] Property ${frontend.version}: Restricting results to 0.13.2
[DEBUG] Property ${frontend.version}: Current winner is: null
[DEBUG] Property ${frontend.version}: Searching reactor for a valid version...
[DEBUG] Property ${frontend.version}: Set of valid available versions from the reactor is []
[INFO] Property ${frontend.version}: Leaving unchanged as 0.13.1
[INFO] ------------------------------------------------------------------------
我已经指定了-DautoLinkItems=false
,这似乎没有效果<代码>版本maven插件仍然会扫描我所有的POM,寻找匹配的依赖项,然后举手退出。我还尝试在插件配置中将该属性的searchReactor
设置为false
。看起来插件(1)错误地扫描了依赖项,即使我明确地说忽略它们,(2)甚至过滤掉了一个明确的特定匹配项
有没有一种简单的方法可以将Maven属性项重写为特定值,或者强制
versions Maven plugin
执行我说的操作而不验证版本号,或者使用另一个目标?我宁愿避免像sed这样不懂XML的工具(正如我在一个类似的问题中看到的建议),但我可以使用简单的XPath操作。如何更新现有POM中的属性:
尝试在以下位置使用筛选:
- 它应该起作用李>
- 版本只指定一次李>
- 可以在版本控制下添加属性文件李>
- 流程资源是maven生命周期的第一步
- 那么,pom.xml仍然使用占位符李>
- 从初始构建自动更新属性文件的额外工作(太复杂了,我想应该有更简单的解决方案)
我很确定它也适用于这个版本。此外,顶级项目的属性由child继承。newVersion参数的文档记录很差(此插件的大部分也是如此)。通过检查集成测试,我发现它需要的不是一个简单的版本号。此外,它不允许您提供任何值—它必须是Maven可以解析的有效值。如果调用
constraintrange
对于将来的其他人,请尝试以下方法:
mvn versions:update-property -Dproperty=frontend.version -DnewVersion=[0.13.2]
如果需要更新快照,请确保将属性allowSnapshots
设置为true
mvn versions:update-property -Dproperty=frontend.version -DnewVersion=[0.13.2] -DallowSnapshots=true
在pom.xml中定义属性时,如果希望更新属性有效,则必须声明为间隔 我的意思是,确保您的frontend.version定义如下:
<frontend.version>0.13.1</frontend.version>
购买您需要将属性值更改为一个范围
遗憾的是,我无法在pom定义中使用range。我也遇到了同样的问题,但在文件中没有发现任何更改pom属性的内容。 我最终按照你的建议使用了sed:
cat pom.xml | sed -e "s%<util.version>0.0.1-SNAPSHOT</util.version>%<util.version>$bamboo_planRepository_branch</util.version>%" > pom.xml.transformed;
rm pom.xml;
mv pom.xml.transformed pom.xml;
cat pom.xml | sed-e“s%0.0.1-SNAPSHOT%$bambor\u planRepository\u branch%>pom.xml.transformed;
rm pom.xml;
mv pom.xml.transformed pom.xml;
以下内容适用于版本:更新属性目标。我认为这同样适用于版本:update属性
默认情况下,只有在同一POM文件中出现相应的属性定义和依赖项声明时,目标才会起作用
例如,如果该属性在项目POM中定义,但在模块POM中的依赖项声明中使用,则项目POM中需要以下配置,以便通过版本插件进行自动更新
<properties>
<my.version>3.7.11</my.version>
</properties>
...
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<properties>
<property>
<name>my.version</name>
<dependencies>
<dependency>
<groupId>com.acme.test</groupId>
<artifactId>demo-arti</artifactId>
</dependency>
</dependencies>
</property>
</properties>
</configuration>
</plugin>
</plugins>
</build>
3.7.11
...
org.codehaus.mojo
版本maven插件
2.2
我的版本
com.acme.test
演示艺术
当版本maven插件针对POM运行并尝试更新属性时,插件配置开始生效。配置告诉Versions插件,该属性将用于“在某个地方的POM中”声明的依赖项,即使不在当前POM中
有没有简单的方法将Maven属性项重写为特定值
由于版本2.5
我们可以使用set属性
():
mvn版本:设置属性-Dproperty=your.property-DnewVersion=任意_值
如文件所述,
set属性
目标不会对您指定的值执行任何“健全性检查”,因此它应该始终有效,但您应小心使用。我对更新属性
有问题,但设法使其与set属性
一起工作:
mvn versions:set-property -Dproperty=mypropery -DnewVersion=myvalue
我需要实际更新POM,而不仅仅是覆盖特定的构建。版本控制中的
pom.xml
应该更新,以指向最新的良好上游工件,以便开发构建知道如何使用它。嗯,看起来资源插件实际上允许多次设置值,我将更新我的答案。你有没有找到一个可行的解决方案?我遇到了一个完全相同的问题,更新属性实际上没有更新属性。我在版本:更新属性mvn versions:update-property -Dproperty=absis.version -DnewVersion=[2.20.4] -X
[DEBUG] Property ${test.version}: Set of valid available versions is [2.19.0-RC-REVISION-1, 2.19.0-RC0.1, 2.19.0-RC0.2, 2.19.0-RC0.3, 2.19.0-RC0.4, 2.19.0-RC0.5, 2.19.0-RC0.6, 2.19.0-RC0.7, 2.19.0-RC1, 2.19.0-RC2, 2.19.0-RC3, 2.19.0, 2.19.0-revision, 2.19.0-revision2, 2.19.0.2, 2.19.1, 2.19.2, 2.19.3, 2.19.4, 2.20.0-RC0, 2.20.0-RC0.1, 2.20.0-RC1, 2.20.0-RC2, 2.20.0-RC3, 2.20.0, 2.20.0-PRUEBA-VERSION, 2.20.0-PRUEBA-VERSION-2, 2.20.0-PRUEBA-VERSION-3, 2.20.0i-RC1, 2.20.0i-RC1.1, 2.20.0i, 2.20.0i.2, 2.20.1, 2.20.2, 2.20.4, 2.20.5, 2.20.5-LT, 2.20.5.1, 2.20.6i-RC1, 2.21.0-RCtest1, 2.21.0-RCtest2]
[DEBUG] Property ${test.version}: Restricting results to [2.20.4,2.20.4]
[DEBUG] Property ${test.version}: Current winner is: 2.20.4
[DEBUG] Property ${test.version}: Searching reactor for a valid version...
[DEBUG] Property ${test.version}: Set of valid available versions from the reactor is []
[INFO] Updated ${test.version} from [2.19.0,2.21.0-SNAPSHOT] to 2.20.4
cat pom.xml | sed -e "s%<util.version>0.0.1-SNAPSHOT</util.version>%<util.version>$bamboo_planRepository_branch</util.version>%" > pom.xml.transformed;
rm pom.xml;
mv pom.xml.transformed pom.xml;
<properties>
<my.version>3.7.11</my.version>
</properties>
...
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<properties>
<property>
<name>my.version</name>
<dependencies>
<dependency>
<groupId>com.acme.test</groupId>
<artifactId>demo-arti</artifactId>
</dependency>
</dependencies>
</property>
</properties>
</configuration>
</plugin>
</plugins>
</build>
mvn versions:set-property -Dproperty=mypropery -DnewVersion=myvalue