sbt-buildinfo

by sbt

I know this because build.sbt knows this.

473 Stars 77 Forks Last release: 3 months ago (v0.10.0) MIT License 281 Commits 23 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:

sbt-buildinfo

I know this because build.sbt knows this.

sbt-buildinfo generates Scala source from your build definitions.

Latest Stable

For sbt 1.x add sbt-buildinfo as a dependency in

project/plugins.sbt
:

Bintray version

addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "x.y.z")
  • For
    sbt >= 0.13.6
    , see 0.9.0.
  • For
    sbt < 0.13.6
    , see 0.3.2.

Usage

Add the following in your

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

When you reload the settings and compile, this generates the following:

package hello

import java.io.File import java.lang._ import java.net.URL import scala.; import Predef.

/** This object was generated by sbt-buildinfo. / case object BuildInfo { /** The value is "helloworld". / val name: String = "helloworld" / The value is "0.1-SNAPSHOT". / val version: String = "0.1-SNAPSHOT" /** The value is "2.10.3". / val scalaVersion: String = "2.10.3" / The value is "0.13.2". */ val sbtVersion: String = "0.13.2" override val toString: String = "name: %s, version: %s, scalaVersion: %s, sbtVersion: %s".format(name, version, scalaVersion, sbtVersion) }

As this is generated source it will be found under

target
, specifically for a Scala 2.11 project under
target/scala-2.11/src_managed/main/sbt-buildinfo

Customize

buildInfoKeys
by adding whatever keys you want to have in
BuildInfo
. You can use
BuildInfoKey.map
to change the generated field name and value, add new fields with tuples, or add new fields with values computed at build-time. Note:
BuildInfoKey.map
can can handle both
SettingKey[T]
and
TaskKey[T]
types as arguments:
buildInfoKeys ++= Seq[BuildInfoKey](
  resolvers,
  libraryDependencies in Test,
  BuildInfoKey.map(name) { case (k, v) => "project" + k.capitalize -> v.capitalize },
  "custom" -> 1234, // computed at project load time
  BuildInfoKey.action("buildTime") {
    System.currentTimeMillis
  } // re-computed each time at compile
)

This generates:

  /** The value is Seq("Sonatype Public: https://oss.sonatype.org/content/groups/public"). */
  val resolvers: Seq[String] = Seq("Sonatype Public: https://oss.sonatype.org/content/groups/public")
  /** The value is Seq("org.scala-lang:scala-library:2.9.1", ...). */
  val test_libraryDependencies: Seq[String] = Seq("org.scala-lang:scala-library:2.9.1", ...)
  /** The value is "Helloworld". */
  val projectName = "Helloworld"
  /** The value is 1234. */
  val custom = 1234
  /** The value is 1346906092160L. */
  val buildTime = 1346906092160L

Tasks can be added only if they do not depend on

sourceGenerators
. Otherwise, it will cause an infinite loop.

Here's how to change the generated object name:

buildInfoObject := "Info"

This changes the generated object name to

object Info
. Changing the object name is optional, but to avoid name clash with other jars, package name should be unique. Use
buildInfoPackage
key for this.
buildInfoPackage := "hello"

build number

A build number can be generated as follows. Note that cross building against multiple Scala would each generate a new number.

buildInfoKeys += buildInfoBuildNumber

BuildInfoOption.ToMap

Add the following option

buildInfoOptions += BuildInfoOption.ToMap

to generate

toMap
method:
val toMap = Map[String, Any](
  "name" -> name,
  "version" -> version,
  "scalaVersion" -> scalaVersion,
  "sbtVersion" -> sbtVersion)

BuildInfoOption.ToJson

Add the following option

buildInfoOptions += BuildInfoOption.ToJson

to generate

toJson
method.

BuildInfoOption.Traits

Add the following option

buildInfoOptions += BuildInfoOption.Traits("TestTrait1", "TestTrait2")

to mixin traits to the generated object.

BuildInfoOption.BuildTime

Add the following option

buildInfoOptions += BuildInfoOption.BuildTime

to add timestamp values:

/** The value is "2015-07-30 03:30:16.849-0700". */
val builtAtString: String = "2015-07-30 03:30:16.849-0700"
/** The value is 1438227016849L. */
val builtAtMillis: Long = 1438227016849L

License

MIT License

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.