如何检测 Grails 中的构建时间?另外,在构建战争时指定提交修订

Sum*_*tha 5 grails tomcat build war

我必须在不使用外部数据库的情况下从正在运行的应用程序显示一些部署级别参数。第一个是战争构建日期时间。有没有办法让我的 tomcat 部署的 grails 应用程序知道构建何时进行?

另外,有没有什么方法可以让我们指定战争的提交修订,然后可以由应用程序读取?用于读取修订号的脚本是外部任务,但我关心的是在自动构建战争时传递此值以及应用程序在部署时读取它。

Ian*_*rts 3

您可以通过scripts/_Events.groovy添加eventCreateWarStart. 在最终 Web 应用程序的内容已组装到暂存目录中之后但在它们被压缩以形成 WAR 之前,会触发此事件。您可以在暂存目录中创建新文件以将它们包含在 WAR 中。例如:

eventCreateWarStart = { warName, stagingDir ->
  ant.exec(executable:'read-revision-number',
           output:"${stagingDir}/WEB-INF/classes/revision.txt") {
    arg(value:'any-argument-the-script-needs')
  }
}
Run Code Online (Sandbox Code Playgroud)

这将运行脚本并将其输出放入 WAR 中,您可以使用AnyClassInYourApplication.getResource("/revision.txt").

您可以在构建时使用完全相同的原则,通过放置类似的内容

new File(stagingDir, "WEB-INF/classes/build.timestamp").text = "${new Date()}"
Run Code Online (Sandbox Code Playgroud)

eventCreateWarStart

如果您想要真正聪明,请让您的脚本以 Java 兼容的“属性”格式文件输出详细信息,例如

my.app.revision=123456
my.app.build.timestamp=Fri Nov 01 14:25:30 GMT 2013
Run Code Online (Sandbox Code Playgroud)

然后在您的应用程序中Config.groovy添加classpath:build-details.propertiesgrails.config.locations,然后可以通过 获得详细信息grailsApplication.config