==================
构建工具与生态
==================
SBT(Scala Build Tool)
========================
SBT 是 Scala 生态的标配构建工具,支持增量编译、依赖管理和任务自动化。
build.sbt 配置
--------------
.. code-block:: scala
:caption: build.sbt
lazy val root = project
.in(file("."))
.settings(
name := "my-project",
version := "0.1.0",
scalaVersion := "3.6.2",
// 依赖管理
libraryDependencies ++= Seq(
"org.typelevel" %% "cats-effect" % "3.5.7",
"org.scalatest" %% "scalatest" % "3.2.19" % Test,
),
// 编译器选项
scalacOptions ++= Seq(
"-deprecation", // 弃用警告
"-feature", // 特性警告
"-unchecked", // 未检查警告
"-Xfatal-warnings", // 警告视为错误
),
)
依赖配置语法
------------
.. list-table::
:header-rows: 1
* - 写法
- 说明
* - ``"org" %% "name" % "ver"``
- 自动添加当前 Scala 版本后缀
* - ``"org" % "name" % "ver"``
- Java 库(无版本后缀)
* - ``% Test``
- 仅测试范围(等价于 Maven test scope)
* - ``% Provided``
- 编译时提供,打包时排除
常用命令
---------
.. code-block:: bash
sbt compile # 编译
sbt test # 运行测试
sbt run # 运行主类
sbt console # Scala REPL(含项目依赖)
sbt clean # 清理构建产物
sbt reload # 重新加载 build.sbt 变更
sbt compile --watch # 持续编译(文件变更自动重编译)
多模块项目
----------
.. code-block:: scala
:caption: build.sbt
lazy val core = project
.in(file("modules/core"))
.settings(
name := "my-core",
libraryDependencies += "org.typelevel" %% "cats-core" % "2.13.0",
)
lazy val app = project
.in(file("modules/app"))
.dependsOn(core) // 依赖 core 模块
.settings(
name := "my-app",
)
测试框架
=========
ScalaTest
----------
.. code-block:: scala
import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers
class CalculatorSpec extends AnyFlatSpec with Matchers:
"A calculator" should "add two numbers" in:
val result = 2 + 3
result shouldEqual 5
it should "multiply two numbers" in:
(3 * 4) should be > 10
.. tip::
ScalaTest 支持多种风格(FlatSpec、WordSpec、FunSuite 等)。
``AnyFlatSpec`` 是最常用的一种,可读性好。
MUnit
------
轻量级测试框架,由 Scala Center 维护:
.. code-block:: scala
import munit.FunSuite
class MySuite extends FunSuite:
test("addition") {
assertEquals(2 + 3, 5)
}
test("exception") {
intercept[ArithmeticException]:
1 / 0
}
常用框架与库
=============
.. list-table::
:header-rows: 1
* - 框架
- 用途
- 官网
* - **Apache Spark**
- 大数据分布式计算引擎
- https://spark.apache.org/
* - **Akka**
- Actor 模型并发与分布式系统
- https://akka.io/
* - **Play**
- 全栈 Web 框架(类型安全路由、热重载)
- https://www.playframework.com/
* - **http4s**
- 纯函数式 HTTP 服务
- https://http4s.org/
* - **cats**
- 纯函数式编程核心库
- https://typelevel.org/cats/
* - **ZIO**
- 零依赖的函数式并发与 I/O 库
- https://zio.dev/
* - **circe**
- JSON 编解码(函数式)
- https://circe.github.io/circe/
* - **Doobie**
- 纯函数式 JDBC 数据库访问层
- https://tpolecat.github.io/doobie/
* - **Tapir**
- 类型安全的 HTTP API 定义
- https://tapir.softwaremill.com/
* - **ScalaCheck**
- 属性基测试(自动生成测试用例)
- https://scalacheck.org/
学习资源
=========
.. grid:: 2
.. grid-item-card:: 官方资源
^^^^^^^^^^^^^^^^
- `Scala 官方文档 `__
- `Scala 3 书籍 `__
- `Scala 标准库 API `__
.. grid-item-card:: 推荐书籍
^^^^^^^^^^^^^^^^
- **Programming in Scala** (Martin Odersky 等)
- **Functional Programming in Scala** (Paul Chiusano 等)
- **Scala with Cats** (Noel Welsh 等)
.. grid-item-card:: 在线课程
^^^^^^^^^^^^^^^^
- Coursera: Functional Programming in Scala
- Rock the JVM(视频教程)
- Scala Bridge(入门工作坊)
.. grid-item-card:: 社区与资讯
^^^^^^^^^^^^^^^^
- `Scala Center `__
- `Typelevel `__
- `Reddit r/scala `__