sbt构建工具

sbt

简介

sbt是一个简单的项目构建工具,类似于Maven。SBT是Simple Build Tool的首字母缩写,而因为我们多用其来构建Scala项目,所以另一种说法是Scala Build Tool。在当前的情况下,Maven多用于Java项目的构建,而sbt则面向scala项目。

sbt的官网为scala-sbt.org,其中很容易找到下载的界面。在下载之前首先需要准备好Java环境。下载好压缩包,之后解压到对应的路径,并配置好相关的环境变量$SBT/bin即可。

配置好环境变量之后,可以在命令行中输入sbt --version查看当前sbt的版本。

Getting Started

安装好了sbt之后,我们就可以构建一个简单的scala项目。sbt构建项目同Maven一样对项目目录有一定的要求。sbt除了会检查在项目根目录下的文件之外,也与Maven一样,会检查以下路径中的文件:

  • src/main/scalasrc/main/java中的源文件
  • src/test/scalasrc/test/java中的测试文件
  • src/main/resourcessrc/test/resources中的数据文件
  • lib中的jar文件

那么我们现在可以构建如下目录的项目,目录结构如下:

1
2
3
4
5
sbt-test
- src
- main
- scala
- hello.scala

在源文件目录下的hello.scala中是一个简单的scala Object:

1
2
3
4
5
object Hello {
def main(args: Array[String]) = {
println("Hello,sbt!")
}
}

在命令行中进入项目目录,执行sbt命令,就会进入到sbt的交互式命令行模式。然后执行run命令,sbt就会自动扫描找到对应的入口方法并执行,像上面的项目,执行的效果就是:

1
2
3
sbt:sbt-test> run
[info] running Hello
Hello,sbt!

在执行完命令之后,在项目目录下会出现两个新目录,分别是/project/target。在project目录下会生成一个build.properties文件,其中指定了sbt的版本。修改这个文件中的内容可以强制指定需要使用的sbt版本。虽然sbt在不同的release版本中是基本兼容的,但是在/project/build.properties中设置sbt的版本仍然能够避免一些潜在的混淆情况。

常用命令

下面是一些常用的sbt命令:

命令 命令功能
clean 删除所有生成的文件 (在 target 目录下)
compile 编译源文件(在 src/main/scalasrc/main/java 目录下)
test 编译和运行所有测试
console 进入到一个包含所有编译的文件和所有依赖的 classpath 的 Scala shell中
run <参数>* 执行项目的 main class
package src/main/resources 下的文件和 src/main/scala 以及 src/main/java 中编译出来的 class 文件打包成一个 jar 文件
help <命令> 显示指定的命令的详细帮助信息。如果没有指定命令,会显示所有命令的简介
reload 重新加载构建定义(build.sbtproject/*.scalaproject/*.sbt 这些文件中定义的内容)。在修改了构建定义文件之后需要重新加载

构建设置

在Maven中,我们构建项目的配置会放在根目录的pom.xml文件中。而在sbt中,承担这一角色的是项目根目录下的build.sbt文件。.sbt后缀的文件使用的是兼容Scala的特殊语法。

在项目的基础目录中存在 build.sbt。而其他的 sbt 文件在 project 子目录中。 project 目录中还可以包含 .scala 文件,这些文件最后会和 .sbt 文件合并共同构成完整的构建设置。

每个工程实际上都可以对应到一个映射表,这个映射表是众多键值对的集合,这些键值对信息就可以用来描述这个工程。例如我们可以在根目录下的build.sbt文件中输入如下内容:

1
2
3
4
5
6
7
name := "Hello Sbt Project"      // 项目名称

organization := "xxx.xxx.xxx" // 组织名称(包名前缀)

version := "0.0.1" // 版本号

scalaVersion := "2.12.1" // 使用的Scala版本号

这就是在settings中指定了项目的名称,版本号等。name和version属性会在项目打包时作为包名的一部分,而organization则会作为包名的前缀。再次进入sbt命令行,可以通过show name来查看当前项目的名称:

1
2
sbt:Hello Sbt Project> show name
[info] Hello Sbt Project

同时我们还可以在build.sbt中声明依赖。依赖分为第三方的依赖以及本地jar包的依赖。

第三方的依赖通常都会提供对应的配置,我们同样可以在Maven Repository中找到对应的依赖配置,配置模式如下:

1
2
3
4
5
6
7
8
// resolvers 表示 依赖下载来源
resolvers += "xxx" at "url"

libraryDependencies += "groupId" % "artifactId" % "version" % "scope"

// 例如
// https://mvnrepository.com/artifact/com.google.code.gson/gson
libraryDependencies += "com.google.code.gson" % "gson" % "2.9.1"

而本地的依赖我们可以统一将其管理在对应的目录下,例如项目根目录下的/myLib,对应的jar包都放在该目录下,之后在文件中增加如下配置,这里的baseDirectory指的就是项目根目录。

1
unmanagedBase := baseDirectory.value / "myLib"

完成依赖配置之后,就可以运行sbt update命令来进行依赖的下载与配置。

参考文章

  1. Sbt-Docs
  2. Scala构建工具SBT

sbt构建工具
http://example.com/2023/02/22/sbt构建工具/
作者
EverNorif
发布于
2023年2月22日
许可协议