【问题标题】:Maven, automating the version changeMaven,自动化版本更改
【发布时间】:2014-03-09 11:16:54
【问题描述】:

假设我有一个 pom 文件,

<version>14.4.1-SNAPSHOT</version>

它定义了要构建的项目的版本。该值由我们的构建系统 (jenkins) 自动更新。

稍后,在其中一个插件中,我需要一个属性,它包含版本中的前两个数字,因此对于 14.4.1-SNAPSHOT 值,它将是“14.4”,对于 13.12。 39-SNAPSHOT 值将是“13.12”。

目前我们每个月都会手动更新这个值:

<plugins>
        <plugin>
            <groupId>org.liquibase</groupId>
            <artifactId>liquibase-maven-plugin</artifactId>
            <version>2.0.1</version>
            <executions>
                <execution>
                    <id>default-cli</id>
                    <phase>process-resources</phase>
                    <configuration>
                        <changeLogFile>src/main/resources/14.4/changeLog.xml</changeLogFile>

理想情况下,我希望有类似的东西

<changeLogFile>src/main/resources/${releaseVersion}/changeLog.xml</changeLogFile>

但是我如何从&lt;version&gt;14.4.1-SNAPSHOT&lt;/version&gt; 自动计算得到这个${releaseVersion} (=14.4)?

在这种情况下,它是绝对自动化的,我们没有任何手动流程。 我可以在 pom 文件中使用任何表达式类型的语言,它可以解析字符串 14.4.1-SNAPSHOT 并从中生成 14.4 吗?

【问题讨论】:

  • 你能改变父pom吗?
  • 哦,请问您目前是如何提高版本的?通过 Maven 发布?
  • @LordT 是的,我想我可以,这取决于那里要改变什么。为什么?
  • @LortT 是的,我们在詹金斯有一份工作,手动/定期触发。没关系。我想避免在发布过程中为这个小插件更改我的版本..

标签: maven build-automation release-management


【解决方案1】:

您可以为此尝试使用带有 parse-version 的 mojo build-helper。

Stack Overflow Question

Original Documentation

[编辑] 这是我的示例 pom.xml:

<build>

 <plugins>
  <plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-war-plugin</artifactId>
  <version>2.2</version>
  <configuration>
  <webResources>
    <resource>
            <filtering>true</filtering>
     <targetPath>WEB-INF</targetPath>
    <directory>src/main/resources/${parsedVersion.majorVersion}.${parsedVersion.minorVersion}</directory>
    </resource>
</webResources>
</configuration>
</plugin>
<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.8</version>
    <executions>
      <execution>
      <phase>validate</phase>
        <id>parse-version</id>
        <goals>
          <goal>parse-version</goal>
        </goals>
         <configuration>
        <propertyPrefix>parsedVersion</propertyPrefix>
    </configuration>
      </execution>
    </executions>
  </plugin>
  <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <version>1.1</version>
        <executions>
            <execution>
                <phase>validate</phase>
                <goals>
                    <goal>run</goal>
                </goals>
                <configuration>
                    <tasks>
                        <echo>Major: ${parsedVersion.majorVersion}</echo>
                        <echo>Minor: ${parsedVersion.minorVersion}</echo>
                        <echo>Incremental: ${parsedVersion.incrementalVersion}</echo>
                        <echo>Qualifier: ${parsedVersion.qualifier}</echo>
                        <echo>BuildNumber: ${parsedVersion.buildNumber}</echo>
                    </tasks>
                </configuration>
            </execution>
        </executions>
    </plugin>
    </plugins>
</build>

【讨论】:

  • 非常感谢,这就是我一直在寻找的...也许需要在发布问题之前提高我的搜索技能:)