¿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