代码之家  ›  专栏  ›  技术社区  ›  Benny Bottema

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

  •  0
  • Benny Bottema  · 技术社区  · 7 年前

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

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

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

    这样的事情可能吗?也许通过预先配置 版本插件 在pom内部,完全忽略 newVersion 从命令行删除属性?

    2 回复  |  直到 7 年前
        1
  •  0
  •   Gmugra    7 年前

    实际上,你有更好的方法来实现你的目标: https://maven.apache.org/maven-ci-friendly.html

    想法是使用属性${revision}而不是版本值。

    所以在所有的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) https://maven.apache.org/docs/3.3.1/release-notes.html

    /.mvn
        maven.config
    /submodule-one
    /submodule-two
    pom.xml
    

    maven.config包含属性的版本设置: -Drevision=1.1.10-SNAPSHOT

    因此,maven.config是唯一需要为所有模块设置版本的地方。 当您想要更改版本时,不需要在POMs中更改任何内容。

    另外,您可以在我的maven测试项目中看到所有这些: https://github.com/Gmugra/net.cactusthorn.maven

        2
  •  0
  •   Benny Bottema    7 年前

    其实很简单,只要提供 新版本 pom中的属性:

    <properties>
        <library.version>1.0.0</library.version>
        <newVersion>${library.version}</newVersion>
    </properties>
    

    然后只需执行versions:set而不提供属性,它将从POM获取属性:


    替代解决方案:

    您还可以跳过该属性并使用maven dynamically update

    以下内容增加了修补程序版本:

    mvn生成帮助程序:解析版本版本:set-DnewVersion=${parsedVersion.nextMajorVersion}.${parsedVersion.minorVersion}.${parsedVersion.IncrementalVersion}版本:提交

    这是Maven内置的,可以开箱即用。