我多次看到这个问题,但是没有令人满意的答案:让我们假设你有maven项目生产一些jar(java桌面应用程序)。 如何在pom.xml中定义版本号,在适当的时候(例如每次构建时)会自动递增(甚至手动,无关紧要)但是有可能将此版本加载到应用程序中? 目标是为用户显示他当前使用的应用程序的版本。
答案 0 :(得分:3)
您可以选择四个选项:
第一个选项可由Java class like this处理:
public class TheVersionClass
{
..
public TheVersionClass()
{
InputStream resourceAsStream =
this.getClass().getResourceAsStream(
"/META-INF/maven/com.soebes.examples/version-examples-i/pom.properties"
);
this.prop = new Properties();
try
{
this.prop.load( resourceAsStream );
}
...
}
}
second option is to use the MANIFEST.MF file
public class TheVersionClass {
public TheVersionClass() {
System.out.println( " Implementation Title:" + this.getClass().getPackage().getImplementationTitle() );
System.out.println( " Implementation Vendor:" + this.getClass().getPackage().getImplementationVendor() );
System.out.println( "Implementation Version:" + this.getClass().getPackage().getImplementationVersion() );
System.out.println( " Specification Tile:" + this.getClass().getPackage().getSpecificationTitle() );
System.out.println( " Specification Vendor:" + this.getClass().getPackage().getSpecificationVendor() );
System.out.println( " Specification Version:" + this.getClass().getPackage().getSpecificationVersion() );
}
}
不幸的是,这些信息通常不会被放入MANIFEST.MF文件中,因此您必须更改配置。
第三个选项是创建一个在构建过程中作为resourced过滤的文件,第四个选项是使用templating-maven-plugin创建适当的类。以上所有内容都可以查看github project。
当然,你可以使用buildnumber-maven-plugin将你的版本控制系统中的信息添加到你的MANIFEST.MF文件中,并使用下面应该位于你的根目录中的代码片段来增强任何示例。您的模块或更好地进入公司pom文件,该文件添加此文件以执行每个构建:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.2</version>
<configuration>
<revisionOnScmFailure>UNKNOWN</revisionOnScmFailure>
<getRevisionOnlyOnce>true</getRevisionOnlyOnce>
<providerImplementations>
<svn>javasvn</svn>
</providerImplementations>
</configuration>
<executions>
<execution>
<goals>
<goal>create</goal>
</goals>
</execution>
</executions>
</plugin>
如果您只有新版本,我不会更改版本。将Jenkins或您正在使用的任何CI解决方案中的buildnumber添加到MANIFEST.MF文件中可能很有用,但我会使用Maven的版本,如果发布,将从1.0-SNAPSHOT
更改为{{ 1}}。