我可以从命令行引用POM属性吗?

时间:2019-02-08 20:09:56

标签: maven

给出pom内部定义的属性,我可以从命令行引用该属性吗?

这是我想要实现的:

# instead of:
mvn versions:set -DnewVersion=x.y.z
# something like this:
mvn versions:set -DnewVersion=properties:library.version

这样,我可以在一个地方管理我的多模块项目版本并同时更新所有模块。

像这样可能吗?也许是通过在pom本身内部预配置 version插件并从命令行中完全省略newVersion属性?

2 个答案:

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