sbt 基础

作为 scala 自身的 build tool,自然跟 scala 自身有很多关系,像 debian 等系统自带的 scala 编译环境还比较老,想玩新的 scala 功能什么的自己装又比较繁琐,通过 sbt 和其 ivy 依赖关系求解方案,实验一些 scala 的代码,开始一个 scala 的项目都变得格外的容易。

一般来说首先下载一个 sbt 的包,然后别的什么都可以交给 sbt 来做了。需要速度的同志简单的创建一个目录,里面放上 build.sbt,里面填一些内容,目录结构推荐是 有个 src/main/scala 就行了,一般 test 放在 src/test 里面,多语言的支持通过如 src/main/java 表示。build.sbt 是用 scala 的 DSL 写的,语法有点怪异(其实 GNU Make 也有点…),一般需要

name := "hello"

version := "1.0"

scalaVersion := "2.10.2"

即可,需要加依赖的话通过类似下面的语法,三个参数分别是 groupId、artifactId 和 version,跟 maven 的一致

libraryDependencies += "org.apache.derby" % "derby" % "10.4.1.3"

常见的 sbt 命令有

  • run 运行带 main 的 class,也可以 “run-main main.class.path” 来运行其中一个
  • clean 不必说了
  • console 可以打开 scala 的 REPL
  • test 运行测试
  • package 打包

有了这些就可以开始玩最基本的 scala 了,不过有点可惜的是某些编译选项比较麻烦,特别不像有个 scalac 你可以直接编译一两个文件,或者用 -print 输出一些去掉语法糖之后的结果。下面是一些小 tips:

  • 分三个 scope,Compile、Test 和 Runtime,所有的 setting 可以在不同的 scope 里面声明,比如测试采用的 lib 可以用 libraryDependencies in Test += 来添加等等。
  • 在 sbt console 里面可以通过 inspect 来打印一些相关信息,如 test:fullClasspath
  • sbt 的 in 还可以指定 task,或者 (scope, task) 的组合
  • 可以用 ++= 添加 Seq,比如多个依赖关系可以用这样的形式表达 ++= Seq(“g1” % “a1” % “v1”, “g2” % “a2” % “v2”)
  • resolver 可以增加新的站点,+= “site name” at “url”
  • 可以通过 plugin 增强,如 code coverage 之类的工具,可以用 addSbtPlugins += 添加
  • 可以用 scala code 实现简单的 task
  • 传递编译选项,除了在 sbt 文件里面弄还可以到 sbt 命令行里面 set scalacOptions += 然后 compile
  • sbt 传递几个任务的时候,需要用引号将每个任务和参数括起来

有了这些基本的东西就能很快的开始一个 scala 项目,玩一些 feature,实验一些不错的 idea。发现 scala 相关的学习资源还是挺丰富的,它的 FAQ 居然是跟 stack overflow 绑定的,可能有人在 stack overflow 上问,也有高人在上面解答,然后整理了一些 popular 的问题,反倒成了一个很不错的 FAQ,这大概就是 social network/QA 网站 在学习上的重要应用吧。

——————-
And Zilpah Leah’s maid bare Jacob a son.

Advertisements
sbt 基础

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s