Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

I know this because build.sbt knows this.

License

NotificationsYou must be signed in to change notification settings

sbt/sbt-buildinfo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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 inproject/plugins.sbt:

sbt-buildinfo Scala version support

addSbtPlugin("com.eed3si9n"%"sbt-buildinfo"%"x.y.z")

Usage

Add the following in yourbuild.sbt:

lazyvalroot= (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:

packagehello/** This object was generated by sbt-buildinfo.*/caseobjectBuildInfo {/** The value is "helloworld".*/valname:String="helloworld"/** The value is "0.1-SNAPSHOT".*/valversion:String="0.1-SNAPSHOT"/** The value is "2.10.3".*/valscalaVersion:String="2.10.3"/** The value is "0.13.2".*/valsbtVersion:String="0.13.2"overridevaltoString:String="name: %s, version: %s, scalaVersion: %s, sbtVersion: %s".format(name, version, scalaVersion, sbtVersion)}

As this is generated source it will be found undertarget, specifically for a Scala 2.11 project undertarget/scala-2.11/src_managed/main/sbt-buildinfo

CustomizebuildInfoKeys by adding whatever keys you want to have inBuildInfo. You can useBuildInfoKey.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 handle bothSettingKey[T] andTaskKey[T] types as arguments:

buildInfoKeys++=Seq[BuildInfoKey](  resolvers,Test/ libraryDependencies,BuildInfoKey.map(name) {case (k, v)=>"project"+ k.capitalize-> v.capitalize },"custom"->1234,// computed at project load timeBuildInfoKey.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").*/valresolvers:Seq[String]=Seq("Sonatype Public: https://oss.sonatype.org/content/groups/public")/** The value is Seq("org.scala-lang:scala-library:2.9.1", ...).*/valtest_libraryDependencies:Seq[String]=Seq("org.scala-lang:scala-library:2.9.1", ...)/** The value is "Helloworld".*/valprojectName="Helloworld"/** The value is 1234.*/valcustom=1234/** The value is 1346906092160L.*/valbuildTime=1346906092160L

Tasks can be added only if they do not depend onsourceGenerators. Otherwise, it will cause an infinite loop.

Here's how to change the generated object name:

buildInfoObject:="Info"

This changes the generated object name toobject Info. Changing the object name is optional, but to avoid name clash with other jars, package name should be unique. UsebuildInfoPackage 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 generatetoMap method:

valtoMap=Map[String,Any]("name"-> name,"version"-> version,"scalaVersion"-> scalaVersion,"sbtVersion"-> sbtVersion)

BuildInfoOption.ToJson

Add the following option

buildInfoOptions+=BuildInfoOption.ToJson

to generatetoJson 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".*/valbuiltAtString:String="2015-07-30 03:30:16.849-0700"/** The value is 1438227016849L.*/valbuiltAtMillis:Long=1438227016849L

BuildInfoOption.PackagePrivate

Set the package usingbuildInfoPackage and use the optionBuildInfoOption.PackagePrivate

buildInfoPackage:="hello"buildInfoOptions+=BuildInfoOption.PackagePrivate

to make the generatedBuildInfo object package private:

/** This object was generated by sbt-buildinfo.*/private[hello]caseobjectBuildInfo {    ...}

BuildInfoOption.ConstantValue

Add the following option

buildInfoOptions+=BuildInfoOption.ConstantValue

to have all vals in theBuildInfo object declaredfinal and without an explicit type annotation:

/** This object was generated by sbt-buildinfo.*/caseobjectBuildInfo {/** The value is "helloworld".*/finalvalname="helloworld"  ...}

This is particular useful if the values must be constants – e.g., if you need to assign them to annotation arguments.

BuildInfoOption.ImportScalaPredef

Add the following option

buildInfoOptions+=BuildInfoOption.ImportScalaPredef

to explicitly importscala.Predef._ in the generated code.

packagehelloimportscala.Predef._/** This object was generated by sbt-buildinfo.*/caseobjectBuildInfo {  ...}

This import is necessary only when using compiler option-Yno-imports. Please note, the generated import is not compatible when compiling with Scala 3 compiler option-source:future because import wildcards must be*.

License

MIT License


[8]ページ先頭

©2009-2025 Movatter.jp