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

(2014-09-13) 如何在build.sbt中调用其它scala中定义的值

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

我们通常使用build.sbt来配置一个sbt项目。由于build.sbt使用了一些简单易读的格式,在带给我们方便的同时,有时候也不太方便定义一些东西。

这时我们可以将build.sbt和普通的scala代码结合起来,在scala文件中把东西都定义好,然后在build.sbt直接调用即可。

目录结构

multi
├── build.sbt
└── project
    ├── aaa.scala
    └── bbb.scala

aaa.scala

这里定义了一个普通的scala文件:

object aaa {
   val name = "The name from scala file"
}

bbb.scala

同样普通

object bbb {
    def hello = { println("method from scala file") }
}

build.sbt

name := aaa.name

version := "1.0"

lazy val hello = taskKey[Unit]("a hello task")

hello := bbb.hello

可以看到在这里,直接使用了aaabbb中定义的东西。

运行

$ sbt
[info] Loading project definition from  /sbttest/multi/project
[info] Done updating.
[info] Compiling 2 Scala sources to  /sbttest/multi/project/target/scala-2.10/sbt-0.13/classes...
[info] Set current project to The name from scala file (in build file: /sbttest/multi/)
> name
[info] The name from scala file
> hello
method from scala file

可以看到,当执行sbt命令的时候,它会自动编译project目录下的两个scala文件aaa.scalabbb.scala

当执行name时,它输出了在aaa中定义的name。当执行hello的时候,它运行的也是bbb中定义的方法。

comments powered by Disqus