我们正在从Java/Gradle堆栈迁移到Scala/SBT.我们的gradle构建利用一个名为processResources的任务和一些名为ReplaceTokens的Ant过滤器来动态替换签入的.properties文件中的标记,而不实际更改.properties文件(只是更改输出).gradle任务看起来像:
processResources { def whoami = System.getProperty( 'user.name' ); def hostname = InetAddress.getLocalHost().getHostName() def buildTimestamp = new Date().format('yyyy-MM-dd HH:mm:ss z') filter ReplaceTokens, tokens: [ "buildsig.version" : project.version, "buildsig.classifier" : project.classifier, "buildsig.timestamp" : buildTimestamp, "buildsig.user" : whoami, "buildsig.system" : hostname, "buildsig.tag" : buildTag ] }
此任务查找src/main/resources目录中的所有模板文件,执行必需的替换并在build/resources/main输出结果.换句话说,它转换了src/main/resources/buildsig.properties ...
buildsig.version=@buildsig.version@ buildsig.classifier=@buildsig.classifier@ buildsig.timestamp=@buildsig.timestamp@ buildsig.user=@buildsig.user@ buildsig.system=@buildsig.system@ buildsig.tag=@buildsig.tag@
...构建/ resources/main/buildsig.properties ......
buildsig.version=1.6.5 buildsig.classifier=RELEASE buildsig.timestamp=2013-05-06 09:46:52 PDT buildsig.user=jenkins buildsig.system=bobk-mbp.local buildsig.tag=dev
最终,它会进入WEB-INF/classes/buildsig.properties的WAR文件.这类似于冠军在属性文件中记录构建特定信息,该文件在运行时从类路径加载.
我在SBT做什么来完成这样的事情?我是Scala/SBT的新手所以请原谅我,如果这似乎是一个愚蠢的问题.在一天结束时,我需要的是从我构建的环境中提取一些信息并将该信息放入可在运行时加载的类路径的属性文件中.您可以提供任何有助于我完成此任务的见解,我们非常感谢.
这sbt-buildinfo
是一个不错的选择.该README显示了如何定义自定义映射和映射,应该在每次编译运行的例子.除了直接添加如此处version
所示的常规设置外,您还需要这样的部分:
buildInfoKeys ++= Seq[BuildInfoKey]( "hostname" -> java.net.InetAddress.getLocalHost().getHostName(), "whoami" -> System.getProperty("user.name"), BuildInfoKey.action("buildTimestamp") { java.text.DateFormat.getDateTimeInstance.format(new java.util.Date()) } )