使用SBT构建Scala项目

sbt可是说是scala下的maven,用来构建项目甚是方便。

sbt使用Ivy管理包依赖,依赖的包会从maven中央库中下载,当然也可以指定特定的中央库。

sbt相比maven有一定的学习成本,但是他支持scala定义任务,而且描述项目信息比maven简单很多,支持增量式编译和交互式操作,所以还是非常值得学习一下的。

sbt的一些常用命令:

  • clean 删除target目录中所有自动生成的文件
  • compile 编译main目录(src/main/scala, src/main/java)中的源文件
  • test 编译并执行测试用例
  • console 打开一个scala解释器,其classpath中包含所有已编译的源文件和依赖
  • run 运行项目主文件,和sbt在同一个jvm上
  • package 打包,创建一个jar,包含src/main/resources中的文件和src/main/scala, src/main/java中编译后的class文件
  • help 显示命令帮助,如果没有命令,单只输入help,显示所有支持命令的基本描述
  • reload 重新加载项目的构建定义,包括build.sbt, project/.scala, project/.sbt等文件,如果你修改了这些构建定义,可能需要用到.

build.sbt说明

build.sbt最常用的功能就是描述项目信息和依赖的包。

build.sbt的一个示例:

name := "test-sbt"

organization := "cn.zhaishidan"

version := "1.0"

scalaVersion := "2.10.4"

scalaBinaryVersion := "2.10"

resolvers ++= Seq(  
  "OSChina Repository" at "http://maven.oschina.net/content/groups/public"
)

libraryDependencies ++= {  
  val scalaTestVersion = "2.1.5"
  val sparkVersion = "1.1.1"
  val akkaVersion = "2.2.3"
  val sprayCanVersion = "1.2.2"
  val sprayJsonVersion = "1.2.6"
  val slickVersion = "2.1.0"
  val slf4jVersion = "1.7.5"
  val log4jVersion = "1.2.17"
  val mysqlVersion = "5.1.6"
  Seq(
    "org.scalatest" %% s"scalatest" % scalaTestVersion,
    "org.apache.spark" %% s"spark-core" % sparkVersion,
    "org.apache.spark" %% s"spark-sql" % sparkVersion,
    "com.typesafe.akka" %% s"akka-actor" % akkaVersion,
    "io.spray" % "spray-can" % sprayCanVersion,
    "io.spray" %% s"spray-json" % sprayJsonVersion,
    "com.typesafe.slick" %% s"slick" % slickVersion,
    "org.slf4j" % "slf4j-api" % slf4jVersion,
    "org.slf4j" % "slf4j-log4j12" % slf4jVersion,
    "log4j" % "log4j" % log4jVersion,
    "mysql" % "mysql-connector-java" % mysqlVersion
  )
}

主要注意的是:

  • build.sbt是scala的表达式片段,每行配置中必须使用空行隔开(sbt会转换为scala的Seq[T]类型,空行相当于逗号)
  • 关于libraryDependencies,%函数用于拼接依赖库信息,相当于Maven中的groupId % artifactId % version

    关于%%,两个%,表示让sbt根据你项目的scala版本自动为artifact添加上版本号

    相当于artifactId_${scalaVersion.name}

关于SBT详细的使用说明,可以参考官方的文档:

英文:http://www.scala-sbt.org/0.13/tutorial/index.html

中文:http://www.scala-sbt.org/0.13/tutorial/zh-cn/index.html

查找第三方库

到这里搜索需要用到的库:http://www.mvnrepository.com/

这上面有一个sbt的依赖语法,可以直接将其添加到build.sbt文件中: