Sbt

Scala有一套官方的编译、构建工具 Sbt,全称:The interactive build tool (交互构建工具)。它除了能做向 Maven、Gradle类似的 事情以外,它还有一个交互式的环境,可以在里面执行一些常用命令,甚至直接执行、测试代码。

安装 Sbt

详细安装教程请阅读官方文档:https://www.scala-sbt.org/1.x/docs/index.html

Linux/Unix/Mac

下载安装并配置Sbt:

wget -c https://github.com/sbt/sbt/releases/download/v1.2.8/sbt-1.2.8.tgz
tar zxf sbt-1.2.8.tgz
echo 'export SBT_HOME="/home/yangjing/sbt-1.2.8"
export PATH="$SBT_HOME/bin:$PATH"
' >> ~/.bash_profile
. ~/.bash_profile

现在可以在当前终端执行 sbt 命令了,若在重启系统前需要在其它终端也运行 sbt 命令,需要执行 . ~/.bash_profile 以使环 境变量生效。

Windows

下载 https://github.com/sbt/sbt/releases/download/v1.2.8/sbt-1.2.8.msi ,双击安装。

创建一个 Sbt 项目

创建一个 Sbt 还是比较简单的,你可以从使用 sbt new 命令从线上众多的模板开始,也可以手动创建。

sbt new

sbt new scala/scala-seed.g8

Minimum Scala build. 

name [My Something Project]: scala-seed

当前目录下多了个 scala-seed 目录,通过 sbt new 创建的项目里面的 Scala 版本可能不是你想要的。不过在这里不用担心,保持默认即可。(本书 将基于 Scala 2.12.x 讲解)。

Sbt 控制台

Sbt 是一个交互式的构建工具,它具有一个 REPL 的命令行控制台,你可以在里面编译、运行、测试,甚至打包及执行自定义命令……

[yangjing@yangjing-31 scala-seed-project]$ /usr/bin/sbt
[info] Loading settings from idea.sbt ...
[info] Loading global plugins from /opt/local/share/sbt/1.0/plugins
[info] Loading project definition from /tmp/scala-seed-project/project
[info] Loading settings from build.sbt ...
[info] Set current project to Scala Seed Project (in build file:/tmp/scala-seed-project/)
[info] sbt server started at local:///home/yangjing/.sbt/1.0/server/d42fb1897d8aa6920ae0/sock
sbt:Scala Seed Project>

运行示例程序

runMain example.Hello

运行 scalatest 测试

testOnly example.HelloSpec

多项目工程

通常在真实的应用开发中,我们都会在一个工程里有多个子项目,使用子项目的形式来区分不同模块。我们只需要在 build.sbt 工程配置文件中使用 project 指令来定义不同的子项目即可,一个示例如下:

name in Global := "multi-project"

organization in Global := "me.yangbajing"

version in Global := "0.0.1"

scalaVersion in Global := "2.12.8"

lazy val `multi-project-root` = project.in(file("."))
  .aggregate(app)

lazy val app = project
  .dependsOn(common)

lazy val common = project
  .settings(
    libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.5" % Test
  )
  • project:需要传入一个File参数,用于设置子项目的本地路径。
  • aggregate:根项目中用于聚合需要的子项目。在Sbt控制台不进入子项目的情况下使用compiletest等命令时会依次进入所有配置了的子项目执行命令。
  • dependsOn:指定依赖的项目。
  • settings:对应单项目配置时的配置项都在此设置。

多项目工程目录结构如下:

├── app
│   ├── src
│   │   ├── main
│   │   └── test
├── common
│   ├── src
│   │   ├── main
│   │   └── test
├── project
│   ├── build.properties
├── build.sbt
注意

默认,sbt不会创建src/main/scalasrc/test/scala等相关源码目录,这需要我们手动创建。