Freewind @ Thoughtworks scala java javascript dart 工具 编程实践 月结 math python english [comments admin] [feed]

(2014-09-13) sbt中build.sbt和Build.scala配合使用

广告: 云梯:翻墙vpn (省10元) 土行孙:科研用户翻墙http proxy (有优惠)

在一个sbt项目中,可以同时存在build.sbtproject/Build.scala。通常建议尽量使用build.sbt来定义主要的配置,而在Build.scala中放置一些供同一个项目中的多个子项目共享的代码。

另外:

  1. build.sbt可以读取Build.scala中定义的key,反之不可以。
  2. build.sbt中定义的key优先级高,它会覆盖Build.scala中定义的同名key

project/Build.scala

在项目中创建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

然后我们在项目下创建一个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的值。

comments powered by Disqus