我想将构建信息添加到我的Play!应用程序的页脚(Play!2.0.4 with Scala),类似于在stackoverflow上所做的。我是SBT的新手,很高兴大多数时候一切都像魅力一样工作。:-)
基本上,我想从project/Build.scala
中提取应用程序版本,添加当前日期,最后添加一个内部版本号(自动递增,但这可能是另一个问题的主题)。此信息应添加到包含在主conf/application.conf
中的文件conf/build-info.conf
中。我知道如何从应用程序配置中提取构建信息并将其添加到页面中。
谢谢你的时间!
我想出了bash
脚本的扩展,该扩展执行应用程序的实际暂存和启动,从而在启动SBT/play之前提供构建信息。此扩展从Mercurial
存储库中获取工作目录的修订版,并将其与当前日期一起写入文件conf/build-info.conf
。我没有使用自动递增的构建计数器,因为存储库提供的信息应该足够了。
#!/bin/bash
CHANGESET=`hg tip | grep changeset`
while IFS=":" read -ra PARTS; do
REV=`echo "${PARTS[1]}" | tr -d ' '`@`hg branch`
echo application.build="`date +"%Y-%m-%d"` "[$REV]"" > conf/build-info.conf
done <<< "$CHANGESET"
导致文件包含类似于
application.build="2013-01-25 [98@bug-001]"
可以轻松扩展此脚本以grep
应用程序版本的文件project/Build.scala
,并将其包含在创建的生成信息中。
随意复制/粘贴和调整/改进。无需署名,但始终欢迎在此处提供反馈:-)
在编译时向项目添加构建信息的一种简单方法是使用名为 sbt-buildinfo 的 SBT 插件。
首先根据您的 SBT 版本选择正确的版本,然后按照说明进行操作。 默认情况下,在编译时仅记录应用程序name
、version
、scalaVersion
和sbtVersion
。
要添加 build time
、 dependencies
或任何其他自定义值,您可以将以下代码添加到build.sbt
并对其进行自定义:
buildInfoKeys ++= Seq[BuildInfoKey](
resolvers,
libraryDependencies in Test,
BuildInfoKey.map(name) { case (k, v) => "project" + k.capitalize -> v.capitalize },
"custom" -> 12345, // computed at project load time
BuildInfoKey.action("buildTime") {
System.currentTimeMillis
} // re-computed each time at compile
)