5

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

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

4

2 回答 2

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')
  }
}

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

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

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

eventCreateWarStart

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

my.app.revision=123456
my.app.build.timestamp=Fri Nov 01 14:25:30 GMT 2013

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

于 2013-11-01T14:13:17.337 回答
1

以上答案适用于 grails2,但是任何寻找 grails 3 解决方案的人都可以使用buildProperties任务

buildProperties {
    inputs.property("info.app.build.date", new Date().format('yyyy-MM-dd HH:mm:ss'))
}

它将在 meta-info/grails.build.info 文件中添加到战争中

相同的方法可用于 git commit 或任何其他细节。

请参阅本文如何将构建日期和其他自定义信息添加到 grails 战争

于 2017-07-06T13:57:00.920 回答