Сборка и развёртывание нескольких проектов
Настройте и управляйте сборками SBT для нескольких проектов в крупных приложениях и подготовьте их к развёртыванию.
«Сборка и развёртывание нескольких проектов» — бесплатный урок Scala for Backend Engineering & Functional Programming на CoddyKit. Это урок 3 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Scala for Backend Engineering & Functional Programming, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Scala for Backend Engineering & Functional Programming содержит 3 уроков всего.
Части этого урока еще не переведены и отображаются на английском.
Why Multi-Project Builds?
As Scala applications grow, managing all code in a single project can become difficult. Multi-project builds help organize your codebase.
They allow you to:
- Separate different modules (e.g., core logic, API, utilities).
- Manage dependencies between these modules clearly.
- Apply specific settings to individual parts of your application.
This approach improves modularity and maintainability.
Defining Multiple Projects
In SBT, you define multiple projects within your main build.sbt file. Each project is typically a lazy val.
The root project usually aggregates or depends on these sub-projects.
Here's a basic setup for a root project and two sub-projects:
lazy val root = project
.in(file("."))
.aggregate(core, api)
lazy val core = project
.in(file("core"))
lazy val api = project
.in(file("api"))Sub-Project Directory Structure
For a multi-project build, each sub-project typically resides in its own directory at the root level of your project.
The standard structure looks like this:
my-app/(root project directory)build.sbt(main build file)project/(SBT build definition files)core/(sub-project 'core' directory)src/(source code for 'core')
api/(sub-project 'api' directory)src/(source code for 'api')
Example Sub-Project Code
Each sub-project can contain its own Scala source files. For instance, our core project might have a simple utility.
Try running this example from within the core project:
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"))
}
}Inter-Project Dependencies
Often, one sub-project needs to use code from another. For example, your api project might need the Greeter from the core project.
You declare these dependencies using .dependsOn() in your build.sbt.
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)Sharing Common Settings
Many settings (like Scala version or common dependencies) might be the same across all your sub-projects.
To avoid repetition, you can define a commonSettings block and apply it to each project.
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)Aggregating Tasks
When you have a root project aggregating sub-projects, running a task like compile on the root will automatically run it on all aggregated sub-projects.
For example, typing sbt compile in your root directory will compile both core and api.
The .aggregate() method is key for this behavior.
Packaging for Deployment
Once your application is built, you need to package it for deployment. This usually means creating an executable JAR (Java Archive) file.
For multi-project builds, you often want a single JAR that includes all your project's code and its dependencies. This is called a 'fat JAR' or 'uber JAR'.
SBT doesn't create fat JARs by default, but plugins can help.
SBT Assembly Plugin for Fat JARs
The sbt-assembly plugin is widely used to create fat JARs. It bundles all compiled classes and dependencies into one executable JAR.
First, add the plugin to project/plugins.sbt:
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "2.0.0")Multi-Project Packaging
Which of the following statements about packaging a multi-project Scala application for deployment is TRUE?
Recap & Next Steps
You've learned how to structure and manage multi-project builds in SBT!
- We covered defining sub-projects in
build.sbt. - You saw how to organize directories and manage inter-project dependencies with
.dependsOn(). - We discussed sharing common settings and aggregating tasks.
- Finally, we explored packaging for deployment, specifically using the
sbt-assemblyplugin to create fat JARs.
Mastering multi-project builds is crucial for larger, more complex Scala applications, ensuring modularity and efficient development workflows.
Часто задаваемые вопросы
Урок «Сборка и развёртывание нескольких проектов» бесплатный?
Да — полный текст урока «Сборка и развёртывание нескольких проектов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Scala for Backend Engineering & Functional Programming, подпишись на CoddyKit PRO. Курс Scala for Backend Engineering & Functional Programming содержит 3 уроков всего.
Чему я научусь в уроке «Сборка и развёртывание нескольких проектов»?
Настройте и управляйте сборками SBT для нескольких проектов в крупных приложениях и подготовьте их к развёртыванию. Ты практикуешь Scala for Backend Engineering & Functional Programming с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Scala for Backend Engineering & Functional Programming?
Предыдущий опыт не требуется. Scala for Backend Engineering & Functional Programming на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 3.
Сколько времени занимает урок «Сборка и развёртывание нескольких проектов»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Scala for Backend Engineering & Functional Programming?
Да. Каждый урок Scala for Backend Engineering & Functional Programming включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Настройка и основы проектов SBT
- Управление зависимостями и плагины
- Сборка и развёртывание нескольких проектов