¿Cuál sería la forma más fácil de resolver alguna variable en SBT y almacenarla en un archivo de recursos para que esté disponible en tiempo de ejecución?

Más específicamente: ¿cómo puedo obtener el valor version configurado por el complemento sbt-git y hacerlo disponible no solo como parte del nombre JAR de artefacto / ensamblaje, sino también dentro del directorio de recursos, para que pueda acceder en tiempo de ejecución y por ejemplo imprimir en la salida o devolver como versión de servicio a través de algún punto final de versión de mi servicio web?

2
Mateusz Kubuszok 4 abr. 2017 a las 19:38

2 respuestas

La mejor respuesta

Este es mi código para obtener el commit del plano git y almacenarlo junto con la versión del proyecto dentro de un archivo de propiedades path/to/version.properties disponible en el paquete 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)
}⏎  
4
ziggystar 4 abr. 2017 a las 16:57

La forma más fácil suele ser utilizar el complemento sbt-buildinfo.

En tu project/plugins.sbt:

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

Agregue lo siguiente en su build.sbt:

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

Después de recargar y compilar, esto genera un BuildInfo.scala, que le permite acceder a cualquier configuración que haya configurado en buildInfoKeys en tiempo de ejecución.

3
Justin Kaeser 4 abr. 2017 a las 17:47