在应用程序中显示构建时间戳

我想显示应用程序在about框中构建的时间戳。 这将允许我跟踪应用程序的不同版本。 如何在Java中检索此信息?

有一个更简单的maven解决方案,不需要antrun插件。 Maven有一个特殊的变量maven.build.timestamp(自Maven 2.1.0-M1起)。

 maven-war-plugin  2.2    ${maven.build.timestamp}     

这将产生一行“Build-Time:yyyyMMdd-HHmm”。 格式可以自定义:

  yyyy-MM-dd HH:mm  

该模式必须符合SimpleDateFormat的格式。

参考: Maven文档

您需要告诉构建过程将时间戳记放入Java属性文件中,然后您的应用程序可以从中读取它。 另外一个很好的选择就是jar清单文件。

对于ant,您希望使用tstamp和property任务,请参阅此示例 。

当您使用它时,您可能还希望包含源代码管理修订号。

对于Maven

在pom.xml文件中,添加以下内容

   src/main/resources true    ${basedir}/target/filter.properties  

使用Maven AntRun插件生成构建时间,

  org.apache.maven.plugins maven-antrun-plugin   generate-resources  run              

然后将pom文件设置为使用默认清单文件

  org.apache.maven.plugins maven-jar-plugin 2.2  true    

然后在jar文件中生成的MANIFEST.MF将如下所示。

 Manifest-Version: 1.0 Archiver-Version: Plexus Archiver Created-By: Apache Maven Built-By: admin Build-Jdk: 1.5.0_14 Specification-Title: App Name Specification-Version: 0.1 - 2008-02-21 01:03:13 Specification-Vendor: Company Name Implementation-Title: App Name Implementation-Version: 0.1 - 2008-02-21 01:03:13 Implementation-Vendor: Company Name Build-Time: 2008-02-21 01:03:13 

资源

  • 这个博客

  • Maven厨师书


对于ANT

                      The above build.xml outputs a jarfile named 'tstamp-200307011540.jar' 

资源

  • tstamp文档

  • 这个博客

我通常遵循MANIFEST的这种替代方法,因为这可以从我们的应用程序的任何地方轻松访问。

 package com.livngroup.sandbox; import java.io.File; import java.net.URL; import java.net.URLConnection; import java.util.Iterator; import org.apache.commons.io.FileUtils; import org.joda.time.DateTime; public enum Versioning { INSTANCE; public final DateTime buildTime; private Versioning() { this.buildTime = this.getLastModifiedDate(); } private DateTime getLastModifiedDate() { try { return new DateTime(this.getLastModifiedFile().lastModified()); } catch (Exception e) { try { URLConnection conn = Versioning.class.getResource(Versioning.class.getSimpleName()+".class").openConnection(); return new DateTime(conn.getLastModified()); } catch (Exception e2) { return new DateTime(0L); //Just a fallback } } } private File getLastModifiedFile() { try { URL url = Versioning.class.getResource(Versioning.class.getSimpleName()+".class"); File dir = new File(url.toURI()).getParentFile().getParentFile().getParentFile().getParentFile().getParentFile(); //System.out.println("classes.dir: "+dir); String[] extensions = null; File lastModifiedFile = null; for (Iterator iterator = FileUtils.iterateFiles(dir, extensions, true); iterator.hasNext();) { File file = iterator.next(); if(lastModifiedFile==null || FileUtils.isFileNewer(file, lastModifiedFile)) { lastModifiedFile = file; } } //System.out.println("lastModified: "+lastModified); return lastModifiedFile; } catch (Exception e) { return null; } } } 

显然,构建时间可以很容易地被访问

 Versioning.INSTANCE.buildTime