0Pricing
Scala for Backend Engineering & Functional Programming · 课时

依赖管理与插件

管理外部库、声明依赖,并使用 SBT 插件扩展构建功能。

依赖管理与插件 是 CoddyKit 上的免费 Scala for Backend Engineering & Functional Programming 课时。 这是第 2 节课,共 3 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Scala for Backend Engineering & Functional Programming 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Scala for Backend Engineering & Functional Programming 课程共包含 3 节课。

为什么需要外部库?

构建 Scala 项目时,您经常需要核心语言不包含的功能。日志记录、数据库访问或 Web 框架等都是常见示例。

您不必亲自编写所有这些代码,而是可以使用外部库(也称为依赖)。这些是其他开发者编写并共享的预先编写好的代码包。

将库添加到 build.sbt

SBT 可以轻松添加这些外部库。您可以使用 libraryDependencies 设置,在 build.sbt 文件中声明它们。

基本语法如下:

  • "org.group":组织或组 ID。
  • % "artifact":构件 ID(库名称)。对于 Scala 库,请使用 %%,以自动匹配 Scala 版本。
  • % "version":所需库的具体版本。

示例:

libraryDependencies += "org.slf4j" % "slf4j-simple" % "1.7.32"

依赖作用域:编译与测试

项目的不同部分可能只需要特定的库。SBT 使用作用域来管理这一点。

  • compile(默认):编译和运行主要代码时所需。
  • test:仅编译和运行测试代码时所需(例如 ScalaTest 这样的测试框架)。
  • runtime:编译时不需要,但应用程序运行时需要。

可以这样指定作用域:

libraryDependencies += "org.scalatest" %% "scalatest" % "3.2.16" % "test"

自动获取依赖

假设您使用的某个库(例如 Web 框架)自身也使用了其他库。这些库称为传递依赖。

SBT 会自动为您获取所有这些间接依赖。添加某个库时,SBT 会查找它自身的依赖,并一并下载,从而确保项目具备所需的一切。

这样您就不必手动跟踪几十个库了!

使用 SLF4J 记录日志

让我们使用常见的日志记录库 SLF4J(Simple Logging Facade for Java)及其简单实现。首先,将它添加到 build.sbt 中:

libraryDependencies += "org.slf4j" % "slf4j-simple" % "1.7.32"

现在,运行下面的 Scala 代码来查看效果。请注意,我们导入了 org.slf4j.LoggerFactory,它来自刚添加的依赖。

import org.slf4j.LoggerFactory

object Main {
  private val logger = LoggerFactory.getLogger(getClass.getName)

  def main(args: Array[String]): Unit = {
    logger.info("Hello from a logged message!")
    println("This is a standard print output.")
  }
}

使用插件扩展 SBT

除了管理库之外,还可以使用插件扩展 SBT 本身。插件是能够向 SBT 添加新命令或设置的特殊 JAR 文件。

例如,有些插件可用于打包应用程序、部署到服务器,甚至与代码格式化工具等特定工具集成。

它们有助于自动执行常见任务,并简化开发工作流程。

在 plugins.sbt 中声明插件

与放入 build.sbt 的常规依赖不同,SBT 插件需要在专用文件 project/plugins.sbt 中声明。该文件位于 SBT 项目根目录下的 project 目录中。

其语法与依赖类似,但需要使用 addSbtPlugin:

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "2.1.1")

这会告诉 SBT 为项目下载并启用指定插件。

使用 sbt-assembly 创建 Fat JAR

一个常用插件是 sbt-assembly。它会创建一个包含应用程序代码及其所有依赖的单一可执行“Fat JAR”。

首先,将插件添加到 project/plugins.sbt:

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "2.1.1")

添加后,您可以在终端中运行 sbt assembly 来创建 JAR。下面的 Scala 代码就是 sbt-assembly 将要打包的内容。

object Main {
  def main(args: Array[String]): Unit = {
    println("This is a simple application.")
    println("sbt-assembly would package this along with its dependencies into a single JAR.")
  }
}

版本管理与解析器

随着项目不断增长,管理大量依赖可能会变得棘手。以下是一些建议:

  • 版本一致:在所有模块中为同一个库使用相同的版本,以避免冲突。
  • 解析器:SBT 会从仓库(例如 Maven Central)获取库。如果某个库不在默认仓库中,您可以添加自定义解析器。

默认情况下,SBT 使用标准的公共仓库。对于私有库,您需要在 build.sbt 中指定自定义解析器。

排列步骤顺序

您希望向 Scala 项目添加并使用一个新的外部库。请将以下步骤按正确顺序排列。

课程总结

做得很好!您已经学会了如何管理 Scala 项目中的外部代码。

  • 依赖(库)通过 libraryDependencies 添加到 build.sbt 中。
  • SBT 会处理传递依赖,并支持不同的作用域(例如 compile 和 test)。
  • 插件可以扩展 SBT 的功能,并在 project/plugins.sbt 中使用 addSbtPlugin 声明。

掌握依赖和插件管理,是高效构建复杂且稳健的 Scala 应用程序的关键!

常见问题解答

「依赖管理与插件」课时是免费的吗?

是的 — 「依赖管理与插件」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Scala for Backend Engineering & Functional Programming 课程的其余内容,请升级到 CoddyKit PRO。 Scala for Backend Engineering & Functional Programming 课程共包含 3 节课。

「依赖管理与插件」这节课中我会学到什么?

管理外部库、声明依赖,并使用 SBT 插件扩展构建功能。 你通过在浏览器中直接运行的动手代码来练习 Scala for Backend Engineering & Functional Programming,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Scala for Backend Engineering & Functional Programming 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Scala for Backend Engineering & Functional Programming 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 3 节。

「依赖管理与插件」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Scala for Backend Engineering & Functional Programming 课中编写并运行代码吗?

能。每节 Scala for Backend Engineering & Functional Programming 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. SBT 项目配置与基础
  2. 依赖管理与插件
  3. 多项目构建与部署
← 返回 Scala for Backend Engineering & Functional Programming