将SBT变量写入资源

时间:2017-04-04 16:38:08

标签: scala sbt

在SBT中解析某个变量并将其存储到资源文件中最简单的方法是什么,以便它可以在运行时中使用?

更具体地说:如何通过version插件获取sbt-git值,并使其不仅可用作工件/程序集JAR名称的一部分,还可以在资源目录中使用,因此我可以在运行时访问它,例如在输出上打印,或通过我的Web服务的某个版本端点作为服务版本返回?

2 个答案:

答案 0 :(得分:4)

这是我从普通git获取提交的代码,并将其与项目版本一起存储在包path/to/version.properties中可用的属性文件path.to中:

resourceGenerators in Compile <+= Def.task {
  import scala.sys.process._
  val file = (resourceManaged in Compile).value / "path" / "to" / "version.properties"
  val gitHash = "git rev-parse HEAD".!!
  val gitStatus = "git status".!!
  IO.writeLines(file, Seq(
    s"project.version = ${version.value}",
    s"git.hash = $gitHash",
    s"build.date = ${new java.util.Date()}") ++
    gitStatus.split("\n").map("#" + _))
  Seq(file)
}⏎  

答案 1 :(得分:2)

最简单的方法通常是使用sbt-buildinfo插件。

project/plugins.sbt

addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.6.1")

在build.sbt中添加以下内容:

enablePlugins(BuildInfoPlugin)
buildInfoKeys := Seq[BuildInfoKey](name, version, scalaVersion, sbtVersion)
buildInfoPackage := "hello"

重新加载并编译后,会生成BuildInfo.scala,允许您访问在运行时在buildInfoKeys中配置的任何设置。