自动递增Java项目中的内部版本号

时间:2012-01-24 14:21:58

标签: java maven versioning

我正在使用由abbuild代表的版本控制系统,其中a是整体版本(原型,alpha和beta版本为0,主要版本为1),b是里程碑版本(沿着表示原型,alpha,beta阶段)和build表示项目编译的次数。

目前,我已经从文本文件中读取应用程序,增加数字,并在设置调试标志的情况下运行应用程序时保存为文本文件。

我正在寻找一种更“正确”的方法来使用Java和Netbeans来做到这一点。有没有什么方法可以将构建数量注入到构建过程的某个地方?最好将数字保存到项目附带的源文件中 - 而不是依赖附近文件的存在。

6 个答案:

答案 0 :(得分:19)

有几个流行的Maven插件可以实现这一壮举:

Apache Maven项目的Maven Release插件有点overkill,只是为了更新版本号。因此use the latter插件创建版本号(以MAJOR.MINOR.BUILD的形式;例如3.1.4,其中4自动递增),如下所示:

  1. 打开项目的pom.xml文件。
  2. build部分(dependencies部分之后)中加入插件:
  3.   <scm>
        <connection>scm:svn:http://127.0.0.1/dummy</connection>
        <developerConnection>scm:svn:https://127.0.0.1/dummy</developerConnection>
        <tag>HEAD</tag>
        <url>http://127.0.0.1/dummy</url>
      </scm>
      <build>
        <plugins>
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>buildnumber-maven-plugin</artifactId>
            <version>1.4</version>
            <executions>
              <execution>
                <id>buildnumber</id>
                <phase>validate</phase>
                <goals>
                  <goal>create</goal>
                </goals>
              </execution>
            </executions>
            <configuration>
              <format>{0,number}</format>
              <items>
                <item>buildNumber</item>
              </items>                    
              <doCheck>false</doCheck>
              <doUpdate>false</doUpdate>
              <revisionOnScmFailure>unknownbuild</revisionOnScmFailure>   
            </configuration>
          </plugin>    
        </plugins>
        <finalName>${project.artifactId}-${project.version}.${buildNumber}</finalName>
      </build>
    
    1. 确保pom.xml在文件顶部附近的版本元素中定义主要版本和次要版本。例如:
    2. <version>3.1</version>
      
      1. 保存pom.xml文件。
      2. 重建项目。
      3. 版本号应该增加。

        该插件需要配置的源代码管理存储库(<scm>)元素。如果您不关心存储库登记号码,请使用dummy scm代替。这可以用于包括存储库中的修订号,这是reader的练习。

答案 1 :(得分:1)

您可以使用当前分支的git commit count作为内部版本号。使用此命令行获取提交计数:git rev-list HEAD --count

与构建工具集成将非常简单。如果您使用的是Gradle,则可以使用此插件:https://github.com/rockerhieu/Versionberg/

答案 2 :(得分:1)

如今,我建议您避免使用Maven Release插件,以及其他答案中提到的各种手工制作的技巧。

任何导致源代码级别的文件更改的东西都会创建新的提交,因此不必要地污染了您的版本历史记录。

唯一负责管理源代码的版本号的是版本控制管理系统。 换句话说,Git。

好消息是,有几个非常好的选项可供使用,这些工​​具会将git标记控制在版本编号中,而不是相反。

我为您推荐的是JGitver,它以插件的形式支持Maven和Gradle设置,并且非常可配置。

您需要做的就是将一些文件添加到项目的根目录,对其进行配置以使其具有品味,并将pom.xml中的版本号设置为0。完成。 在此处查看enter link description here

答案 3 :(得分:0)

我遇到了一些问题,并使用了“戴夫·贾维斯”的答案。这会将正确的版本和内部版本号添加到本地生成的jar文件中,例如:myProject-3.1.1234.jar。但是在Maven资源库中,工件安装为版本“ 3.1”,而不是(我已经预期)版本“ 3.1.1234”。内部版本号ist仍然不存在...

要使用正确的版本和内部版本号(“ 3.1.1234”)将工件安装到Maven存储库中,您必须执行(除了“ Dave Jarvis”的回答):

  1. 添加主要/次要版本属性:
<properties>
  <!-- !!!!!!!!! SETTING HERE THE CORRECT MAJOR/MINOR VERSION NUMER !!!!!!!!!! -->
  <major.minor.version>1.0</major.minor.version>
</properties>
  1. 使用nashorn-maven-plugin为工件设置正确的版本号:
<!-- set "major.minor.revision" version -->
<plugin>
  <groupId>io.github.michaldo</groupId>
  <artifactId>nashorn-maven-plugin</artifactId>
  <version>0.0.1</version>
  <executions>
    <execution>
      <phase>validate</phase>
      <goals>
        <goal>eval</goal>
      </goals>
      <configuration>
        <script>
          $project.artifact.version = "${major.minor.version}.${buildNumber}";
        </script>
      </configuration>
    </execution>
  </executions>
</plugin>    

重建/安装项目后,工件将以版本“ 3.1.1234”的形式出现在maven存储库中:-)

请注意:要增加主要版本或次要版本,您仅需更改major.minor.version属性!

答案 4 :(得分:0)

借助maven插件和脚本,您无需更改pom就可以做到这一点。

例如,要自动增加没有快照作为前缀的版本的第二个数字(在您的情况下),在Linux系统上,您可以执行以下操作:

#get the current pom version and store it into a variable
version=$(mvn -q -U -Dexpression=project.version -DforceStdout maven-help-plugin:evaluate)
#increment the second digit of the version and overwrite the variable
version=$(echo ${version} |  awk -F'.' '{print $1"."$2+1"."$3}' |  sed s/[.]$//)
#update the pom with the new version
mvn -U versions:set -DnewVersion=${version}

它适用于3位数的版本,但由于sed,也适用于2位数的版本。
当然,请移动适合您要求的数字上的默认增量部分:"+1"

# increment the first digit
awk -F'.' '{print $1+1"."$2"."$3}'

# increment the second digit
awk -F'.' '{print $1"."$2+1"."$3}'

# increment the last digit
awk -F'.' '{print $1"."$2"."$3+1}'

答案 5 :(得分:0)

在需要增加构建的用例之前,通过 CI/CD 工具使用版本 Maven 插件!

https://www.mojohaus.org/versions-maven-plugin/usage.html