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

多项目构建与部署

为大型应用配置和管理多项目 SBT 构建,并为部署做好准备。

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

为什么要使用多项目构建?

随着 Scala 应用程序不断增长,将所有代码放在一个项目中可能会变得难以管理。多项目构建有助于组织代码库。

它们可以让您:

  • 分离不同的模块(例如核心逻辑、API 和工具)。
  • 清晰地管理这些模块之间的依赖关系。
  • 为应用程序的各个部分应用特定设置。

这种方式可以提高模块化程度和可维护性。

定义多个项目

在 SBT 中,您可以在主 build.sbt 文件中定义多个项目。每个项目通常都是一个 lazy val。

根项目通常会聚合这些子项目,或依赖于这些子项目。

下面是根项目和两个子项目的基本设置:

lazy val root = project
  .in(file("."))
  .aggregate(core, api)

lazy val core = project
  .in(file("core"))

lazy val api = project
  .in(file("api"))

子项目目录结构

对于多项目构建,每个子项目通常都位于项目根目录下的独立目录中。

标准结构如下:

  • my-app/(根项目目录)
    • build.sbt(主构建文件)
    • project/(SBT 构建定义文件)
    • core/(名为“core”的子项目目录)
      • src/(“core”的源代码)
    • api/(名为“api”的子项目目录)
      • src/(“api”的源代码)

子项目代码示例

每个子项目都可以包含自己的 Scala 源文件。例如,我们的 core 项目可能包含一个简单的工具。

请尝试在 core 项目中运行此示例:

package com.coddykit.core

object Greeter {
  def greet(name: String): String = s"Hello, $name!"
}

object CoreApp {
  def main(args: Array[String]): Unit = {
    println(Greeter.greet("CoddyKit"))
  }
}

项目间依赖

通常,一个子项目需要使用另一个子项目中的代码。例如,您的 api 项目可能需要使用 core 项目中的 Greeter。

您可以在 build.sbt 中使用 .dependsOn() 声明这些依赖。

lazy val root = project
  .in(file("."))
  .aggregate(core, api)

lazy val core = project
  .in(file("core"))

lazy val api = project
  .in(file("api"))
  .dependsOn(core)

共享通用设置

许多设置(例如 Scala 版本或通用依赖)可能在所有子项目中都相同。

为了避免重复,您可以定义一个 commonSettings 代码块,并将其应用到每个项目。

lazy val commonSettings = Seq(
  scalaVersion := "2.13.8",
  organization := "com.coddykit"
)

lazy val root = project
  .in(file("."))
  .aggregate(core, api)
  .settings(commonSettings)

lazy val core = project
  .in(file("core"))
  .settings(commonSettings)

lazy val api = project
  .in(file("api"))
  .dependsOn(core)
  .settings(commonSettings)

聚合任务

当根项目聚合多个子项目时,在根项目上运行 compile 之类的任务,会自动在所有被聚合的子项目上运行该任务。

例如,在根目录中输入 sbt compile,就会同时编译 core 和 api。

.aggregate() 方法是实现这一行为的关键。

打包以便部署

应用程序构建完成后,您需要将其打包以便部署。这通常意味着创建一个可执行的 JAR(Java Archive)文件。

对于多项目构建,您通常希望生成一个包含项目全部代码及其依赖的单一 JAR。这称为“fat JAR”或“uber JAR”。

SBT 默认不会创建 fat JAR,但插件可以提供帮助。

用于创建 Fat JAR 的 SBT Assembly 插件

sbt-assembly 插件被广泛用于创建 fat JAR。它会将所有已编译的类和依赖打包到一个可执行 JAR 中。

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

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

多项目打包

以下关于将多项目 Scala 应用程序打包以便部署的说法中,哪一项是 TRUE?

回顾与后续步骤

您已经学会了如何在 SBT 中构建和管理多项目构建!

  • 我们介绍了如何在 build.sbt 中定义子项目。
  • 您了解了如何组织目录,以及如何使用 .dependsOn() 管理项目间依赖。
  • 我们讨论了如何共享通用设置和聚合任务。
  • 最后,我们探索了如何为部署进行打包,具体来说,是使用 sbt-assembly 插件创建 fat JAR。

掌握多项目构建对于规模更大、更复杂的 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 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 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