Can I access my Scala app’s name and version (as set in SBT) from code?

sbt-buildinfo

I just wrote sbt-buildinfo.
After installing the plugin:

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

Edit: The above snippet has been updated to reflect more recent version of sbt-buildinfo.

It generates foo.BuildInfo object with any setting you want by customizing buildInfoKeys.

Ad-hoc approach

I’ve been meaning to make a plugin for this, (I wrote it) but here’s a quick script to generate a file:

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)
}

You can get your version as foo.Info.version.

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)