Оригинальный автор(ы) | Марк Харрах |
---|---|
Разработчик(и) | Центр Скала [1] |
Стабильный релиз | 1.10.5 [2] / 3 ноября 2024 г. ( 2024-11-03 ) [3] |
Репозиторий |
|
Написано в | Скала |
Операционная система | Кроссплатформенный |
Платформа | Ява |
Тип | Автоматизация сборки |
Лицензия | Лицензия BSD |
Веб-сайт | scala-sbt.org |
sbt (первоначально простое средство сборки , в настоящее время ничего не стоит [4] ) — это средство сборки с открытым исходным кодом , которое может собирать проекты Java , Scala и Kotlin . Оно направлено на упрощение процедуры построения, компиляции , тестирования и упаковки приложений, библиотек и фреймворков. sbt легко адаптируется, позволяя разработчикам настраивать процесс сборки в соответствии с конкретными потребностями своего проекта.
sbt предоставляет широкий спектр функций, которые делают процесс создания и управления проектами Scala простым и эффективным. [5] Некоторые из ключевых функций включают в себя:
sbt — это фактический инструмент сборки в сообществе Scala, [6] используемый, например, самими компиляторами Scala 2 и Scala 3, [7] [8] Play Framework и Lichess , популярным шахматным сервером. Проект sbt является «бутстрапированным» — он использует sbt для сборки себя и считает догфудинг положительной особенностью.
sbt был изначально выпущен как проект с открытым исходным кодом Марком Харрой в 2008 году. [9] За эти годы он значительно развился благодаря многочисленным выпускам, каждый из которых представлял новые функции, исправления ошибок и улучшения. Вот обзор важных выпусков, а также ключевых изменений и инноваций, которые они ввели: [10]
Сборку 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 , но оно активное и вовлеченное и. |
{{cite web}}
: CS1 maint: числовые имена: список авторов ( ссылка ){{cite web}}
: CS1 maint: числовые имена: список авторов ( ссылка ){{cite web}}
: |last=
имеет общее название ( помощь )