сбт (программное обеспечение)

Инструмент сборки с открытым исходным кодом для проектов Scala и Java
сбт
Оригинальный автор(ы)Марк Харрах
Разработчик(и)Центр Скала [1]
Стабильный релиз
1.10.5 [2] / 3 ноября 2024 г. ; 2 месяца назад [3] ( 2024-11-03 )
Репозиторий
  • github.com/sbt/sbt
Написано вСкала
Операционная системаКроссплатформенный
ПлатформаЯва
ТипАвтоматизация сборки
ЛицензияЛицензия BSD
Веб-сайтscala-sbt.org

sbt (первоначально простое средство сборки , в настоящее время ничего не стоит [4] ) — это средство сборки с открытым исходным кодом , которое может собирать проекты Java , Scala и Kotlin . Оно направлено на упрощение процедуры построения, компиляции , тестирования и упаковки приложений, библиотек и фреймворков. sbt легко адаптируется, позволяя разработчикам настраивать процесс сборки в соответствии с конкретными потребностями своего проекта.

sbt предоставляет широкий спектр функций, которые делают процесс создания и управления проектами Scala простым и эффективным. [5] Некоторые из ключевых функций включают в себя:

  • Управление зависимостями: благодаря возможности автоматической загрузки и обработки зависимостей проекта sbt упрощает использование внешних библиотек и фреймворков.
  • Инкрементная компиляция ' :' sbt может перекомпилировать только те части кода, которые были изменены, что обеспечивает значительную экономию времени в цикле разработки.
  • Настраиваемый процесс сборки: sbt обладает широкими возможностями настройки, что позволяет разработчикам определять индивидуальные параметры сборки и настраивать процесс сборки в соответствии с уникальными требованиями своих проектов.
  • Экосистема плагинов : sbt может похвастаться экосистемой плагинов, которая расширяет его функциональность, включая дополнительные функции, такие как проверки качества кода, автоматизация развертывания и отчеты о покрытии тестами. Разработка и интеграция новых плагинов полностью поддерживаются и поощряются.
  • Непрерывная компиляция и тестирование : с помощью sbt разработчики могут настроить систему на автоматическую перекомпиляцию и повторный запуск тестов при каждом изменении исходного файла.
  • Многопроектные сборки: для разработчиков, работающих над несколькими проектами Scala, sbt предлагает полезные функции для управления ими в рамках одной сборки.
  • Интерактивная оболочка : sbt оснащена интерактивной оболочкой, предоставляющей разработчикам удобный способ выполнения задач и команд на протяжении всего процесса разработки.
  • Параллельное выполнение задач: sbt может выполнять задачи параллельно, ускоряя время сборки крупных проектов.
  • Интеграция с IDE: для оптимизации процесса разработки sbt легко интегрируется с популярными интегрированными средами разработки (IDE), такими как IntelliJ IDEA и Visual Studio Code .

sbt — это фактический инструмент сборки в сообществе Scala, [6] используемый, например, самими компиляторами Scala 2 и Scala 3, [7] [8] Play Framework и Lichess , популярным шахматным сервером. Проект sbt является «бутстрапированным» — он использует sbt для сборки себя и считает догфудинг положительной особенностью.

История

sbt был изначально выпущен как проект с открытым исходным кодом Марком Харрой в 2008 году. [9] За эти годы он значительно развился благодаря многочисленным выпускам, каждый из которых представлял новые функции, исправления ошибок и улучшения. Вот обзор важных выпусков, а также ключевых изменений и инноваций, которые они ввели: [10]

  1. sbt 0.3.2 (2008): Это был первый официальный релиз sbt . Он представил элементарные функции, такие как определение проекта, управление зависимостями и компиляция.
  2. sbt 0.7 (2009): Создал базовую структуру для построения и управления проектами Scala. Ключевые особенности включают инкрементальную компиляцию, управление зависимостями и простое выполнение задач.
  3. sbt 0.10 (2011): Введена существенная переработка синтаксиса определения сборки, что делает его более выразительным и гибким. Также были улучшения в производительности, управлении зависимостями и конфигурации.
  4. sbt 0.12 (2012): Улучшенная поддержка многомодульных проектов, возможность определения пользовательских конфигураций и упрощенная разработка плагинов.
  5. sbt 0.13 (2013): Сосредоточена на удобстве использования и производительности. В этой версии был представлен Activator, [11] веб-инструмент для создания и управления проектами. Другие функции включали инкрементальную компиляцию макросов, улучшенную обработку ошибок определения сборки и различные оптимизации производительности. 0.13 оставалась основной версией sbt в течение следующих четырех лет.
  6. sbt 1.0 (2017): Внесены существенные изменения в кодовую базу sbt , сосредоточены на производительности и стабильности, но также предпринята попытка сохранить совместимость со старыми версиями, насколько это возможно. Новые функции включают унифицированный синтаксис косой черты для определения задач и настроек, улучшенное управление зависимостями и Scala 2.12 в качестве версии языка, используемой для определений сборки. Кроме того, переход на новый инкрементальный компилятор Zinc 1.0 еще больше повысил производительность инкрементальной компиляции. [12]
  7. sbt 1.1 (2018): Этот релиз запустил сервер sbt , позволяющий IDE и другим инструментам взаимодействовать с sbt через протокол языкового сервера (LSP). Он также добавил поддержку кросс-сборки для Scala.js [13] и Scala Native [14] и улучшил производительность различных задач.
  8. sbt 1.3 (2019): Эта версия значительно улучшила пользовательский опыт, ускорив разрешение зависимостей, приняв Coursier [15] в качестве менеджера зависимостей по умолчанию. Дальнейшие улучшения включали улучшения механизма кэширования сборки и поддержку JDK 11.
  9. sbt 1.5 (2021): Добавлена ​​поддержка Scala 3. Также были внесены улучшения в поддержку BSP (Build Server Protocol), [16] что обеспечивает лучшую интеграцию с IDE.
  10. sbt 1.8 (2022): В этом выпуске обновлен Coursier и улучшена поддержка Ivy.
  11. sbt 1.9 (2023): Дополнительные обновления Coursier и текстовое меню для помощи в создании новых проектов.

Файлы сборки

Сборку sbt можно определить с помощью .sbtфайла [17]. Ниже приведен пример build.sbtопределения сборки:

val scalaTest = "org.scalatest" %% "scalatest" % "3.2.14" val akkaVersion = "2.6.20" val akkaActor = "com.typesafe.akka" %% "akka-actor" % akkaVersion val akkaCluster = " com.typesafe.akka" %% "akka-cluster" % akkaVersion                        // Установите версию Scala, используемую этой сборкой, на 2.13.10. ThisBuild / scalaVersion := "2.13.10" ThisBuild / version := "0.1.0-SNAPSHOT" ThisBuild / organization := "com.example"            lazy val root = ( project in file ( " . " )) .gregate ( helloCore ) .dependentsOn ( helloCore ) .settings ( name : = "Hello" , // Добавить одну зависимость для тестов. libraryDependencies += scalaTest % Test )                   lazy val helloCore = ( project in file ( "core" )) . settings ( name := "Hello Core" , libraryDependencies += scalaTest % Test , // Добавить несколько зависимостей. libraryDependencies ++= List ( akkaActor , akkaCluster ) )                     

Пример использования

sbt может быть вызван для каждой команды сборки, или он может войти в интерактивный режим, если команда не задана. Чтобы очистить продукты сборки текущей сборки:

$  sbt  чистый

Несколько команд могут быть использованы в одной строке. Чтобы запустить один тест с именем "Foo" и затем опубликовать экспортированные jar-файлы:

$  sbt "testOnly Foo" опубликовать  

Расширяемость и интеграция

Функциональность sbt может быть расширена с помощью архитектуры плагинов. [18] Плагины, предоставляемые сообществом, охватывают такие области, как подписание, упаковка, публикация и выпуск артефактов, подключение к другим сервисам, таким как блоги и базы данных, или интеграция с другими технологиями.

IntelliJ IDEA и VS Code поддерживают sbt через свои плагины Scala. В обеих этих IDE можно создать новый проект с начальными файлами сборки sbt , а также, если проект уже включает файл сборки sbt , его можно использовать для генерации конфигурации проекта для данной IDE.

Сравнения

Основными альтернативами sbt среди инструментов сборки являются Gradle и Apache Maven , оба устоявшихся инструмента сборки для проектов, разработанных на платформе JVM. В экосистеме Scala другим популярным инструментом сборки является Mill. [19] Выбор между sbt , Gradle, Apache Maven и Mill зависит от конкретных требований вашего проекта и вашего знакомства с инструментами. Если вы работаете в основном со Scala, sbt или Mill могут оказаться более подходящими, в то время как если вы работаете с несколькими языками или технологиями, один из двух других может быть лучшим выбором.

сбтГрадлЗнатокМельница
Язык и целевая аудиторияСпециально разработан для проектов Scala и Java. Предлагает функции, которые отвечают уникальным потребностям экосистемы Scala. Видит наиболее частое использование в проектах Scala.Универсальный, поддерживает несколько языков, включая Java, Groovy, Kotlin, Scala и др. Наиболее часто используется в проектах Java и Kotlin.Используется для проектов Java, но может также поддерживать другие языки программирования через плагины, такие как Scala, Groovy и Kotlin. Видит наиболее частое использование в проектах Java.В первую очередь нацелен на Scala, но поддерживает компиляцию кода Java в смешанных проектах Scala/Java. Чаще всего используется в проектах Scala и особенно привлекателен для разработчиков, которые ценят простоту и предсказуемость в своем инструменте сборки.
Синтаксис файла сборкиФайлы сборки пишутся на языке Scala, используя выразительность и безопасность типов Scala при определении сборки.Файлы сборки могут быть написаны на Groovy или Kotlin. Синтаксис имеет тенденцию быть более декларативным.Использует XML для написания файлов Project Object Model (POM). Синтаксис более многословный и декларативный, отдавая предпочтение стандартизированной структуре проекта и соглашению вместо конфигурации.Использует простую Scala для своих файлов сборки. Определения сборки написаны как определения объектов Scala, а задачи определены как методы внутри этих объектов.
Инкрементная компиляцияФункция инкрементальной компиляции, которая компилирует только те разделы кода, которые были изменены, что ускоряет процесс разработки.Также поддерживает инкрементальную компиляцию для проектов Java и Kotlin, но возможности инкрементальной компиляции Scala не так хорошо развиты, как у sbt .По умолчанию он не поддерживает инкрементальную компиляцию. Его можно включить с помощью плагинов, таких как scala-maven-plugin для проектов Scala или функции инкрементальной компиляции java-compiler-plugin для проектов Java.Особенности инкрементальной компиляции. Кроме того, использует агрессивное кэширование выходных данных задач и изолированные среды для каждой задачи, что дополнительно повышает скорость и точность сборок.
Расширяемость и плагиныПредлагает обширную экосистему плагинов, позволяющую разработчикам расширять функциональность инструмента сборки.Благодаря более широкому распространению на многочисленных языках и платформах экосистема плагинов Gradle более обширна и разнообразна, чем у sbt .Имеет более обширную и зрелую экосистему плагинов, чем sbt, благодаря своей обширной истории и широкому признанию в сообществе Java.Имеет меньшую экосистему плагинов, чем sbt , но поддерживает расширяемость другим способом:

В Mill вы можете определять повторно используемые модули и библиотеки непосредственно в файлах сборки, в чистом Scala. Вы также можете импортировать и использовать сторонние библиотеки Scala в файлах сборки.

ПроизводительностьПрименяет оптимизацию производительности, такую ​​как инкрементальная компиляция и параллельное выполнение задач, но результаты различаются в зависимости от сложности проекта и конкретных вариантов использования.Уделяет особое внимание производительности, используя процесс-демон, работающий в фоновом режиме, для ускорения сборок.По умолчанию он не поддерживает ни инкрементальную компиляцию, ни параллельное выполнение. Оба варианта могут быть достигнуты с помощью плагинов и опций инструмента сборки.Поддерживает инкрементальную компиляцию и параллельное выполнение. Обычно считается, что использует более агрессивный подход к кэшированию, что часто приводит к более быстрому времени инкрементальной сборки по сравнению с sbt , особенно для крупных проектов.
Жизненный цикл сборкиИспользует сложный DSL (доменно-специфический язык) для определений сборки, предлагая более детальный контроль над процессом сборки.Его DSL проще, чем у sbt , более декларативен и может показаться более интуитивно понятным для новичков.Вводит фиксированный жизненный цикл сборки, состоящий из четко определенных фаз, таких как компиляция, тестирование, упаковка, установка и т. д. Благодаря этому Maven обеспечивает единообразную структуру для всех проектов, но ему не хватает гибкости.Сборки определяются в терминах задач. Каждая задача представляет собой единицу работы в сборке, например, компиляция модуля, запуск тестов, создание пакета и т. д. Задачи могут зависеть от других задач. Mill заботится о запуске задач в правильном порядке.
СообществоИмеет активное, поддерживающее сообщество, в основном сосредоточенное на языке программирования Scala.Его сообщество более обширно и разнообразно, чем у sbt , и сосредоточено на различных языках программирования и технологиях.Его сообщество стало больше и разнообразнее, охватывая множество языков программирования и технологий.Mill — это активно развивающийся проект с открытым исходным кодом. Сообщество вокруг него не такое большое и устоявшееся, как сообщество вокруг sbt , но оно активное и вовлеченное и.

Смотрите также

Ссылки

  1. ^ "Lightbend передает право собственности на sbt в Scala Center". scala-lang.org . 25 августа 2023 г. Получено 8 марта 2024 г.
  2. ^ eed3si9n (2024-11-03). "Релизы". github.com . Получено 2023-11-06 .{{cite web}}: CS1 maint: числовые имена: список авторов ( ссылка )
  3. ^ eed3si9n (2024-11-03). "1.10.5". github.com . Получено 2023-11-06 .{{cite web}}: CS1 maint: числовые имена: список авторов ( ссылка )
  4. ^ "Справочное руководство sbt — Часто задаваемые вопросы". www.scala-sbt.org . Получено 15.06.2023 .
  5. ^ "Справочное руководство sbt — Справочное руководство sbt". www.scala-sbt.org . Получено 15.06.2023 .
  6. ^ "Создаем программное обеспечение лучше, вместе". GitHub . Получено 2023-06-15 .
  7. ^ Добро пожаловать!, Язык программирования Scala, 2023-06-14 , получено 2023-06-15
  8. ^ Dotty, Лаборатория методов программирования EPFL, 2023-06-14 , получено 2023-06-15
  9. ^ "Справочное руководство sbt — Руководство разработчика (работа в процессе)". www.scala-sbt.org . Получено 2023-06-15 .
  10. ^ "Выпуски · sbt/sbt". GitHub . Получено 2023-06-15 .
  11. ^ Inc, Lightbend. "Выпущен Typesafe Activator 1.3.0: содержит новый сервер sbt и пользовательский интерфейс | @lightbend". Lightbend . Получено 15.06.2023 . {{cite web}}: |last=имеет общее название ( помощь )
  12. ^ "Ускорение времени компиляции с помощью Zinc 1.0". www.scala-lang.org . 3 ноября 2017 г. Получено 15 июня 2023 г.
  13. ^ "Scala.js". Scala.js . Получено 2023-06-15 .
  14. ^ "Scala Native — Документация Scala Native 0.4.14". scala-native.org . Получено 2023-06-15 .
  15. ^ "Coursier · Pure Scala Artifact Fetching". get-coursier.io . Получено 15.06.2023 .
  16. ^ "Протокол сервера сборки". build-server-protocol.github.io . Получено 2023-06-15 .
  17. ^ sbt: определение сборки .sbt
  18. ^ "Плагины". sbt . Получено 17 октября 2014 г. .
  19. ^ "Введение в Mill :: Mill". mill-build.com . Получено 2023-06-15 .
  • Официальный сайт
Взято с "https://en.wikipedia.org/w/index.php?title=Sbt_(software)&oldid=1263244116"