Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 将SBT变量写入资源_Scala_Sbt - Fatal编程技术网

Scala 将SBT变量写入资源

Scala 将SBT变量写入资源,scala,sbt,Scala,Sbt,解析SBT中的某个变量并将其存储到资源文件中以使其在运行时可用的最简单方法是什么 更具体地说:我如何获得由sbt git插件设置的version值,并使其不仅作为工件/程序集JAR名称的一部分,而且在资源目录中可用,以便我可以在运行时访问它,例如在输出时打印,或者通过我的web服务的某个版本端点返回服务版本?这是我的代码,用于从纯git获取提交,并将其与项目版本一起存储在属性文件path/to/version.properties中,该文件包path.to中提供: resourceGenerat

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


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

这是我的代码,用于从纯
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)
}⏎  

编译中的resourceGenerators最简单的方法通常是使用插件

在您的
项目/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
中配置的任何设置。

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