2017-04-04 30 views
2

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

更具体地说:我怎样才能得到version值由sbt-git插件,使其不仅可作为神器/装配JAR名称的一部分,也是内部资源目录设置,这样我就可以在运行时访问它,例如在输出上打印,还是通过我的Web服务的某个版本端点作为服务版本返回?

回答

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) 
}⏎ 
+0

谢谢!作为sbt-git与sbt-git有什么区别的一个小记录,是我们可以将'version.value'直接存储到文件中,因为sbt-git已经负责检查它是否被释放(通过标记)是否为快照等。但是这个答案不仅对sbt-git用户有用:) –

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