0

我在 Kubernates 中有一个多模块 Maven 项目。我们打算一起对所有这些模块进行版本控制。但截至目前,我最终在每个模块 pom.xml 中使用硬编码版本,如下所示

<parent>
    <artifactId>xyz-application</artifactId>
    <groupId>com.xyz</groupId>
    <version>2.50.0.g</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.xyz</groupId>
<artifactId>xyz-Library</artifactId>
<version>2.50.0.g</version>

主父模块具有以下配置

<modelVersion>4.0.0</modelVersion>
<groupId>com.xyz</groupId>
<artifactId>xyz-application</artifactId>
<version>2.50.0.g</version>
<packaging>pom</packaging>

参考

目前,我在 pom.xml 中使用 mvn release 插件

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-release-plugin</artifactId>
    <version>2.5.3</version>
    <configuration>
        <autoVersionSubmodules>true</autoVersionSubmodules>
        <tagNameFormat>${product_label}-@{project.version}</tagNameFormat>
        <releaseProfiles>releases</releaseProfiles>
        <preparationGoals>clean deploy</preparationGoals>
        <arguments>-s settings.xml</arguments> 
    </configuration>
</plugin>

由于项目在 Kubernetes 中,这里是我在发布时使用的 Jenkins 文件内容

def MVN_RELEASE = "release:clean release:prepare release:perform -Dmaven.source.skip=true"
stage('Release artifacts to artifactory') {
    steps {
        container('maven') {
            withCredentials() {
                sh "mvn ${MVN_RELEASE}  -Dresume=false"
            }
        }
    }
}

现在,在发布期间,我需要通过我选择的新版本更新父 pom 和所有子模块 pom 版本,我可以使用mvn 版本插件,例如

  1. mvn versions:set -DnewVersion=3.00.0-SNAPSHOT -DprocessAllModules -DgenerateBackupPoms=false接着
  2. mvn versions:commit -DprocessAllModules

我应该在 Jenkins/pom.xml 的哪个阶段添加这个?现在,这个插件只有在我想升级到我选择的特定版本(比如3.00.0-Snapshot)时才有用,否则,mvn release 插件应该自动将版本升级到2.50.1-SNAPSHOT. 这是正确的理解吗?

如何优雅地处理这个 pom 版本更新问题?

提前致谢!

4

1 回答 1

1

我不明白你为什么想要版本插件。

首先,您不需要将<version>标签添加到模块中。您需要指定父级的版本,但您可以从父级继承您的版本(相同)。

其次,maven 发布插件具有参数releaseVersiondevelopmentVersion允许您在命令行上设置发布和未来的开发版本。

于 2020-05-20T15:27:06.273 回答