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

2022-09-01 03:56:06

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

目前,我让应用从文本文件中读取,递增数字,并在应用运行时使用设置的调试标志保存到文本文件中。

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


答案 1

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

Apache Maven项目中的Maven Release插件对于简单地更新版本号来说有点过分了。因此,使用后一个插件创建版本号(以MAJOR的形式。次要。构建;例如,其中自动递增),如下所示:3.1.44

  1. 打开项目的文件。pom.xml
  2. 将插件包含在该部分中(在该部分之后):builddependencies
  <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. 确保 在文件顶部附近的 version 元素中定义主要版本和次要版本。例如:pom.xml
<version>3.1</version>
  1. 保存文件。pom.xml
  2. 重新生成项目。

版本号应增加。


该插件需要一个已配置的源代码管理存储库 () 元素。如果您不关心存储库签入编号,请改用虚拟 scm。这可用于包含存储库中的修订版号,这是读者的练习。<scm>


答案 2

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

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


推荐