сбт (программное обеспечение)
Оригинальный автор(ы) | Марк Харра |
---|---|
Разработчик(и) | Скала Центр [1] |
Стабильная версия | |
Репозиторий | |
Написано в | Скала |
Операционная система | Кросс-платформенный |
Платформа | Ява |
Тип | Автоматизация сборки |
Лицензия | Лицензия БСД |
Веб-сайт | скала-sbt |
sbt (первоначально Simple Build Tool , в настоящее время часто считается, что это означает Scala Build Tool или используется как собственное имя). [4] ) — с открытым исходным кодом, инструмент сборки созданный специально для Scala и Java проектов . Его цель — упростить процедуру создания, компиляции , тестирования и упаковки приложений, библиотек и фреймворков. 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]
- sbt 0.3.2 (2008 г.): это был первый официальный выпуск sbt . В нем были представлены элементарные функции, такие как определение проекта, управление зависимостями и компиляция.
- sbt 0.7 (2009 г.): создана базовая основа для создания проектов Scala и управления ими. Ключевые функции включали инкрементальную компиляцию, управление зависимостями и простое выполнение задач.
- sbt 0.10 (2011 г.): внесен существенный пересмотр синтаксиса определения сборки, сделав его более выразительным и гибким. Также были улучшены производительность, управление зависимостями и конфигурация.
- sbt 0.12 (2012 г.): улучшенная поддержка многомодульных проектов, возможность определения пользовательских конфигураций и упрощенная разработка плагинов.
- sbt 0.13 (2013 г.): ориентирован на удобство использования и производительность. В этой версии появился Активатор, [11] веб-инструмент для создания и управления проектами. Другие функции включали инкрементальную компиляцию макросов, улучшенную обработку ошибок определения сборки и различные оптимизации производительности. 0.13 оставалась основной версией SBT в течение следующих четырех лет.
- sbt внесены существенные изменения 1.0 (2017): в кодовую базу sbt с упором на производительность и стабильность, но также предпринята попытка максимально сохранить совместимость со старыми версиями. Новые функции включали унифицированный синтаксис косой черты для определения задач и настроек, улучшенное управление зависимостями и Scala 2.12 в качестве языковой версии, используемой для определений сборок. Более того, переход на новый инкрементный компилятор Zinc 1.0 еще больше повысил производительность инкрементальной компиляции. [12]
- sbt 1.1 (2018 г.): в этом выпуске запущен сервер sbt , позволяющий IDE и другим инструментам взаимодействовать с sbt через протокол языкового сервера (LSP). Также добавлена поддержка перекрестной сборки Scala.js. [13] и Скала Натив [14] и улучшено выполнение различных задач.
- sbt 1.3 (2019): эта версия значительно улучшила взаимодействие с пользователем за счет ускорения разрешения зависимостей за счет внедрения Coursier. [15] в качестве менеджера зависимостей по умолчанию. Дальнейшие улучшения включали улучшение механизма кэширования сборок и поддержку JDK 11.
- sbt 1.5 (2021 г.): добавлена поддержка Scala 3. Также были внесены улучшения в поддержку BSP (протокол сервера сборки), [16] обеспечение лучшей интеграции с IDE.
- sbt 1.8 (2022 г.): в этом выпуске были обновлены Coursier и улучшена поддержка Ivy.
- 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
// Set the Scala version used by this build to 2.13.10.
ThisBuild / scalaVersion := "2.13.10"
ThisBuild / version := "0.1.0-SNAPSHOT"
ThisBuild / organization := "com.example"
lazy val root = (project in file("."))
.aggregate(helloCore)
.dependsOn(helloCore)
.settings(
name := "Hello",
// Add a single dependency, for tests.
libraryDependencies += scalaTest % Test
)
lazy val helloCore = (project in file("core"))
.settings(
name := "Hello Core",
libraryDependencies += scalaTest % Test,
// Add multiple dependencies.
libraryDependencies ++= List(akkaActor, akkaCluster)
)
Пример использования
[ редактировать ]sbt может быть вызван для каждой команды сборки или может перейти в интерактивный режим, если команда не задана. Чтобы очистить продукты сборки текущей сборки:
$ sbt clean
В одной строке можно использовать несколько команд. Чтобы запустить один тест с именем «Foo», а затем опубликовать экспортированные файлы jar:
$ sbt "testOnly Foo" publish
Расширяемость и интеграция
[ редактировать ]Функциональность 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 для записи файлов объектной модели проекта (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 обеспечивает согласованную структуру всех проектов, но ему не хватает гибкости. | Сборки определяются с точки зрения задач. Каждая задача представляет собой единицу работы в сборке, например компиляцию модуля, запуск тестов, создание пакета и т. д. Задачи могут зависеть от других задач. Милль заботится о том, чтобы задачи выполнялись в правильном порядке. |
Сообщество | Имеет активное поддерживающее сообщество, в основном сосредоточенное на языке программирования Scala. | Его сообщество более обширно и разнообразно, чем у sbt , и фокусируется на различных языках программирования и технологиях. | Его сообщество больше и разнообразнее, оно работает с несколькими языками программирования и технологиями. | Mill — активно развивающийся проект с открытым исходным кодом. Сообщество вокруг него не такое большое и устоявшееся, как сообщество вокруг sbt , но оно активное и заинтересованное. |
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Lightbend передает право собственности на sbt Scala Center» . scala-lang.org . Проверено 8 марта 2024 г.
- ^ eed3si9n (22 октября 2023 г.). «Выпуски» . github.com . Проверено 11 ноября 2023 г.
{{cite web}}
: CS1 maint: числовые имена: список авторов ( ссылка ) - ^ eed3si9n (22 октября 2023 г.). «1.9.9» . github.com . Проверено 11 ноября 2023 г.
{{cite web}}
: CS1 maint: числовые имена: список авторов ( ссылка ) - ^ «Справочное руководство sbt — Часто задаваемые вопросы» . www.scala-sbt.org . Проверено 15 июня 2023 г.
- ^ «Справочное руководство sbt — Справочное руководство sbt» . www.scala-sbt.org . Проверено 15 июня 2023 г.
- ^ «Создавайте программное обеспечение лучше вместе» . Гитхаб . Проверено 15 июня 2023 г.
- ^ Добро пожаловать! , Язык программирования Scala, 14 июня 2023 г. , получено 15 июня 2023 г.
- ^ Дотти , Лаборатория методов программирования EPFL, 14 июня 2023 г. , получено 15 июня 2023 г.
- ^ «Справочное руководство sbt — Руководство разработчика (в разработке)» . www.scala-sbt.org . Проверено 15 июня 2023 г.
- ^ «Релиз · sbt/sbt» . Гитхаб . Проверено 15 июня 2023 г.
- ^ Инк, Лайтбенд. «Выпущен Typesafe Activator 1.3.0: содержит новый сервер sbt и пользовательский интерфейс | @lightbend» . Изгиб света . Проверено 15 июня 2023 г.
{{cite web}}
:|last=
имеет общее имя ( справка ) - ^ «Ускорьте время компиляции с помощью Zinc 1.0» . www.scala-lang.org . Проверено 15 июня 2023 г.
- ^ «Скала.js» . Скала.js . Проверено 15 июня 2023 г.
- ^ «Scala Native — документация Scala Native 0.4.14» . scala-native.org . Проверено 15 июня 2023 г.
- ^ «Курьер · Извлечение артефактов из Pure Scala» . get-coursier.io . Проверено 15 июня 2023 г.
- ^ «Протокол создания сервера» . build-server-protocol.github.io . Проверено 15 июня 2023 г.
- ^ sbt: определение сборки .sbt
- ^ «Плагины» . что-то . Проверено 17 октября 2014 г.
- ^ «Знакомство с Мельницей::Мельница» . mill-build.com . Проверено 15 июня 2023 г.