我将首先说明我使用Apache Maven来构建这篇文章。您也可以使用 Ant 或其他工具做类似的事情,但这是我使用 maven 所做的。
我发现处理此问题的最佳方法是使用项目的版本加上颠覆修订作为内部版本号。从 Maven 中,您可以包括以下内容。这将为您提供作为 ${scm.revision} 的 subversion 修订号。
<build>
<plugins>
<plugin>
<artifactId>maven-scm-plugin</artifactId>
<executions>
<execution>
<id>getting-scm.revision</id>
<phase>validate</phase>
<goals>
<goal>update</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
之后,我将其用作 jar 文件清单的一部分作为实现版本。
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>2.1</version>
<configuration>
<archive>
<manifestEntries>
<Implementation-Version>${this.version}.${scm.revision}</Implementation-Version>
</manifestEntries>
</archive>
</configuration>
</plugin>
这样做的好处是您可以使用以下代码从代码中访问它:
Package p = getClass().getPackage();
String version = p.getImplementationVersion();
这为您提供了完整的内部版本号,例如“1.0.13525”,其中最后一个数字是颠覆修订版。有关设置的更多信息,您可以查看我不久前就这个问题所做的完整博客文章。