给出pom内部定义的属性,我可以从命令行引用该属性吗?
这是我想要实现的:
# instead of:
mvn versions:set -DnewVersion=x.y.z
# something like this:
mvn versions:set -DnewVersion=properties:library.version
这样,我可以在一个地方管理我的多模块项目版本并同时更新所有模块。
像这样可能吗?也许是通过在pom本身内部预配置 version插件并从命令行中完全省略newVersion
属性?
答案 0 :(得分:0)
实际上非常简单,只需在pom中提供 newVersion 属性即可。
<properties>
<library.version>1.0.0</library.version>
<newVersion>${library.version}</newVersion>
</properties>
然后仅执行版本:set,而无需提供属性,它将从POM中获取该属性:
MVN版本:set
替代解决方案:
您还可以跳过该属性,并使maven dynamically update为当前版本:
以下增加了补丁版本:
mvn构建帮助器:解析版本:set -DnewVersion = $ {parsedVersion.nextMajorVersion}。$ {parsedVersion.minorVersion}。$ {parsedVersion.IncrementalVersion}版本:commit
这是Maven内置的,可以直接使用。
答案 1 :(得分:0)
实际上,您有更好的方法实现目标: https://maven.apache.org/maven-ci-friendly.html
想法是使用属性$ {revision}代替版本值。
因此,在所有POM中,您都需要执行以下操作:
父POM:
<groupId>my.group</groupId>
<artifactId>my.artifact</artifactId>
<version>${revision}</version>
子模块:
<parent>
<groupId>my.group</groupId>
<artifactId>my.artifact</artifactId>
<version>${revision}</version>
</parent>
现在在项目的根目录(您在其中投影父POM的地方)提供 /。mvn / maven.config 文件(仅供参考:https://maven.apache.org/docs/3.3.1/release-notes.html(JVM和命令行选项)) :
/.mvn
maven.config
/submodule-one
/submodule-two
pom.xml
maven.config包含属性的版本设置:
-Drevision=1.1.10-SNAPSHOT
并且不要忘记在父POM中提供带有flattenMode = resolveCiFriendliesOnly的flatten-maven-plugin配置,与上面链接中的文档中所述完全一样。
因此,maven.config是唯一需要为所有模块设置版本的地方。 而且,当您要更改版本时,无需在POM中进行任何更改。
但是要使其正常工作,您至少需要maven 3.5.0-beta-1。
P.S。您可以在我的Maven测试项目中看到所有这些信息: https://github.com/Gmugra/net.cactusthorn.maven