如何让Maven在maven.build.timestamp中显示本地时区?

在Maven 3.2.2+中, maven.build.timestamp已被重新定义,以按照MNG-5452显示UTC时间。

有没有办法指定我想在我的本地时区而不是UTC中提供时区信息? 我简要地浏览了maven的来源,但是无论如何都没有看到我想要TZ是本地TZ而不是UTC。

如前所述,在当前版本的Maven中(至少版本为3.3。+), maven.build.timestamp属性不允许进行时区覆盖。

但是,如果您可以使用不同的属性名称, build-helper-maven-plugin允许您为各种目的配置自定义时间戳。 以下是在构建期间配置EST中当前时间戳的示例。

   org.codehaus.mojo build-helper-maven-plugin 1.10   timestamp-property  timestamp-property   build.time MM/dd/yyyy hh:mm aa en_US America/Detroit     

然后,您可以使用${build.time}属性而不是${maven.build.timestamp} ,其中您需要在首选时区中构建时间戳。

我认为没有纯Maven解决方案,但您可以使用Ant任务。

按照Maven插件开发人员cookbook中给出的说明,您可以使用 ant任务生成filter.properties文件。 在此元素中,您可以使用与SimpleDateFormat类相同的日期/时间模式自定义时间戳,也可以使用Timezone类 。 然后,您可以使用${build.time} ,默认情况下它将使用您当地的时区。

1)使用maven-antrun-plugin

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

2)激活过滤

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

没有解决方案,但解决方法。 你碰巧使用maven buildnumber-maven-plugin插件吗? 如果是这样,您可以使用它为您生成修订版并构建时间戳。 此时间戳将基于您的本地Java时区配置。

编辑:然而问题是关于timestamp ,正如Dean Schulze指出的那样,只有第一次execution会破坏${buildNumber} 。 要解决此问题,您必须在配置中添加另一个将创建buildRevision 。 更新后的示例,如下。 例如:`

  org.codehaus.mojo buildnumber-maven-plugin 1.3 true   generate-timestamp validate  create   {0,date,yyyy-MM-dd HH:mm:ss Z}  timestamp  buildDateTime true    generate-buildnumber validate  create   0 true buildRevision    

你可以使用${buildDateTime}来注入你的timestamp变量。 具有相同目标的另一个执行也将存储您的修订。