SBT(Simple Build Tool)是Scala的项目构建工具,拥有依赖管理,构建过程管理和打包等功能.
SBT官网上给出各平台的安装方法:
- MAC: 使用homebrew安装
brew install sbt
- Ubuntu: 使用apt-get安装
apt-get install
- Win: 使用官网上的
.msi
安装
sbt可以管理的一个最简单的scala项目可以只有一个.scala
文件. 编写一个hello.scala
源文件:
object Hello {
def main(args: Array[String]) {
println("Hello, world!")
}
}
在源文件所在目录中输入sbt命令, 进入sbt交互终端:
$ ls
hello.scala
$ sbt
[info] Set current project to hello (in build file:~/test_scala/hello/)
> run
[info] Running HelloWorld
Hello, world!
[success] Total time: 1 s
或者使用批处理模式执行命令:
$ sbt run
> $ sbt run
[info] Set current project to hello (in build file:~test_scala/hello/)
[info] Running HelloWorld
Hello, world!
[success] Total time: 1 s
标准SBT项目
虽然sbt可以管理只有一个scala源文件的项目, 但是大多数项目的结构远比这复杂. sbt建议的项目结构:
root
|- build.sbt
|- project
| |- build.properties
| |- plugins.sbt
|- src
| |- main
| | |- java
| | |- scala
| | |- resources
| |- test
| | |- java
| | |- scala
| | |- resources
| |- test
|- target
src
目录下保存着项目源代码, src/main
保存项目代码, src/test
保存测试用例.target
目录用于保存构建项目得到的目标代码.
sbt将项目根目录下的.sbt
文件和project
目录下的.scala
文件作为构建管理文件.后者编写较为复杂, 但是可以实现一些.sbt
无法实现的复杂功能.
有趣的是project
本身也是一个标准的sbt项目, 其下也可以包含另一个project
目录对其进行构建.
build.sbt
build.sbt
中包含以下通用配置:
name := "hello" // 项目名称
organization := "xxx.xxx.xxx" // 组织名称
version := "0.0.1" // 版本号
scalaVersion := "2.12.1" // 使用的Scala版本号
name和version属性在项目打包时将作为包名的一部分. organization则是包名的前缀比如org.apache.spark
.
在build.sbt
中声明依赖:
resolvers += "Typesafe Repository" at "http://repo.typesafe.com/typesafe/releases/"
libraryDependencies +=
"com.typesafe.akka" %% "akka-actor" % "2.1.4"
第三方库的作者通常会提供相应的配置, 比如Using Akka with SBT.
大多数情况下我们可以使用上述这种managed dependencies
方式管理依赖, 它们采用的是Apache Ivy管理方式.
必要的时候可以使用本地jar包作为unmanaged dependencies
.
将jar包放入项目根目录下的CustomLib
目录, 然后在build.sbt
中添加配置:
unmanagedBase := baseDirectory.value / "CustomLib"
baseDirectory
即为项目根目录.
完成依赖配置之后, 运行sbt update
命令下载并配置依赖库.
project
project目录下的配置文件其实并非必须, 这里简介一下:
build.properties
: 主要用于声明sbt的版本等信息plugins.sbt
: 配置sbt插件
sbt指令
sbt拥有交互式和批处理式两种执行方式, 在终端中使用sbt
命令即可进入sbt交互环境.
在sbt命令后添加指令即可进入批处理模式:
$sbt clean compile run package
上文我们提及了run
和update
指令, 这里我们介绍一下常用指令:
-
clean
: 清除target
下生成的文件 -
update
根据构建配置更新依赖项 -
compile
: 编译项目 -
run <args>
: 运行项目 -
console
: 打开一个scala终端, 可以在其中引用当前项目的类 -
test
: 运行test
目录下的所有测试用例 -
package
: 将src/main
中的所有类打包为jar -
reload
: 重新载入构建配置文件 -
help
显示帮助