scala sbt sbt-buildinfo

¿Puedo acceder al código y el nombre de mi aplicación Scala(como se establece en SBT)?



sbt-buildinfo (2)

sbt-buildinfo

Acabo de escribir sbt-buildinfo . Después de instalar el complemento:

lazy val root = (project in file(".")). enablePlugins(BuildInfoPlugin). settings( buildInfoKeys := Seq[BuildInfoKey](name, version, scalaVersion, sbtVersion), buildInfoPackage := "foo" )

Editar: El fragmento anterior se ha actualizado para reflejar la versión más reciente de sbt-buildinfo.

Genera el objeto foo.BuildInfo con cualquier configuración que desee mediante la personalización de buildInfoKeys .

Enfoque ad-hoc

He querido hacer un complemento para esto, (lo escribí) pero aquí hay un script rápido para generar un archivo:

sourceGenerators in Compile <+= (sourceManaged in Compile, version, name) map { (d, v, n) => val file = d / "info.scala" IO.write(file, """package foo |object Info { | val version = "%s" | val name = "%s" |} |""".stripMargin.format(v, n)) Seq(file) }

Puede obtener su versión como foo.Info.version .

Estoy construyendo una aplicación con SBT (0.11.0) usando una definición de construcción de Scala como esta:

object MyAppBuild extends Build { import Dependencies._ lazy val basicSettings = Seq[Setting[_]]( organization := "com.my", version := "0.1", description := "Blah", scalaVersion := "2.9.1", scalacOptions := Seq("-deprecation", "-encoding", "utf8"), resolvers ++= Dependencies.resolutionRepos ) lazy val myAppProject = Project("my-app-name", file(".")) .settings(basicSettings: _*) [...]

Estoy empaquetando un .jar al final del proceso.

Mi pregunta es simple: ¿hay alguna manera de acceder al nombre de la aplicación ("my-app-name") y a la versión ("0.1") programáticamente desde mi código Scala? No quiero repetirlos en dos lugares si puedo evitarlo.

Cualquier orientación muy apreciada!


El nombre y la versión se insertan en el manifiesto. Puede acceder a ellos usando el reflejo de Java desde la clase de Package .

val p = getClass.getPackage val name = p.getImplementationTitle val version = p.getImplementationVersion