在一个sbt项目中,可以同时存在build.sbt
和project/Build.scala
。通常建议尽量使用build.sbt
来定义主要的配置,而在Build.scala
中放置一些供同一个项目中的多个子项目共享的代码。
另外:
build.sbt
可以读取Build.scala
中定义的key,反之不可以。build.sbt
中定义的key优先级高,它会覆盖Build.scala
中定义的同名key在项目中创建project/Build.scala
文件,内容如下:
import sbt._
import sbt.Keys._
object DemoBuild extends Build {
lazy val keyFromScala = settingKey[String]("a key from Build.scala")
lazy val demo = Project(
id = "demo",
base = file("."),
settings = Project.defaultSettings ++ Seq(
name := "Demo",
keyFromScala := "Value from Build.scala"
)
)
}
可以看到它给name
这个预定义的key赋值为Demo
,并且还自定义了一个key keyFromScala
,其值为Value from Build.scala
$ sbt
> name
[info] Demo
> keyFromScala
[info] Value from Build.scala
可以看到两者都起作用了
然后我们在项目下创建一个build.sbt
文件,内容如下:
name := "hello"
version := "1.0"
scalaVersion := "2.11.0"
val mykey = settingKey[String]("Key from build.sbt")
mykey <<= keyFromScala { a => a + " ==> now in build.sbt" }
$ sbt
> name
[info] hello
> mykey
[info] Value from Build.scala ==> now in build.sbt
可以看到name
的值现在已经变成build.sbt
中定义的hello
了,而mykey
的值,也成功的引用了Build.scala
中定义的keyFromScala
的值。