多项目构建与部署
为大型应用配置和管理多项目 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 反馈 — 无需本地设置。
此课程中的所有课时
- SBT 项目配置与基础
- 依赖管理与插件
- 多项目构建与部署