如何在project/plugins.sbt和project/Build.scala之间共享版本值?

Ben*_*man 12 sbt

我想在sbtPlugin和构建的其余部分之间共享一个公共版本变量

这是我正在尝试的:

project/Build.scala:

object Versions {
  scalaJs = "0.5.0-M3"
}
object MyBuild extends Build {
  //Use version number
}
Run Code Online (Sandbox Code Playgroud)

plugins.sbt:

addSbtPlugin("org.scala-lang.modules.scalajs" % "scalajs-sbt-plugin" % Versions.scalaJs)
Run Code Online (Sandbox Code Playgroud)

结果是

plugins.sbt:15: error: not found: value Versions
addSbtPlugin("org.scala-lang.modules.scalajs" % "scalajs-sbt-plugin" % Versions.scalaJs)
Run Code Online (Sandbox Code Playgroud)

有没有办法plugins.sbt在构建的其余部分之间共享版本号规范,例如project/Build.scala

Eug*_*ota 13

SBT-buildinfo

如果你需要versionbuild.sbt和之间分享号码hello.scala,你通常会做什么?我不了解你,但我会使用我写的sbt-buildinfo.

这可以使用buildInfoKeys设置来配置,以显示任意键值version或某些自定义String值.我明白这不是你要问的,而是我的责任.

meta-build(乌龟一直向下)

正如Jacek在" 入门指南"中指出并说明的那样,sbt中的构建是一个项目中定义的项目,该项目位于project目录下一级.为了区分构建,让我们将正常构建定义为正确的构建,并将构建定义为构建的正确构建.例如,我们可以说sbt插件是元构建中的根项目库.

现在让我们回到你的问题.我们如何在project/Build.scala和之间共享信息project/plugins.sbt

使用sbt-buildinfo进行元构建

我们可以通过创建project/project和添加sbt-buildinfo(meta-)元构建来定义另一个构建级别.

这是文件.

project/project/buildinfo.sbt:

addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.3.2")
Run Code Online (Sandbox Code Playgroud)

project/project/Dependencies.scala:

package metabuild

object Dependencies {
  def scalaJsVersion = "0.5.0-M2"
}
Run Code Online (Sandbox Code Playgroud)

project/build.properties:

sbt.version=0.13.5
Run Code Online (Sandbox Code Playgroud)

project/buildinfo.sbt:

import metabuild.Dependencies._

buildInfoSettings

sourceGenerators in Compile <+= buildInfo

buildInfoKeys := Seq[BuildInfoKey]("scalaJsVersion" -> scalaJsVersion)

buildInfoPackage := "metabuild"
Run Code Online (Sandbox Code Playgroud)

project/scalajs.sbt:

import metabuild.Dependencies._

addSbtPlugin("org.scala-lang.modules.scalajs" % "scalajs-sbt-plugin" % scalaJsVersion)
Run Code Online (Sandbox Code Playgroud)

project/Build.scala:

import sbt._
import Keys._
import metabuild.BuildInfo._

object Builds extends Build {
  println(s"test: $scalaJsVersion")
}
Run Code Online (Sandbox Code Playgroud)

所以有一些样板project/buildinfo.sbt,但版本信息在构建定义和插件声明中共享.

如果你很好奇在哪里BuildInfo定义,请查看project/target/scala-2.10/sbt-0.13/src_managed/.