sbt (ursprünglich „Simple Build Tool“ , heute ohne Bedeutung [ 4 ] ) ist ein Open-Source -Build-Tool zum Erstellen von Java- , Scala- und Kotlin -Projekten. Es vereinfacht das Erstellen, Kompilieren , Testen und Verpacken von Anwendungen, Bibliotheken und Frameworks. sbt ist hochgradig anpassungsfähig und ermöglicht Entwicklern, den Build-Prozess an die spezifischen Bedürfnisse ihres Projekts anzupassen.
sbt bietet eine Vielzahl von Funktionen, die das Erstellen und Verwalten von Scala-Projekten einfach und effizient gestalten. [ 5 ] Zu den wichtigsten Funktionen gehören:
- Abhängigkeitsmanagement: Durch die Fähigkeit, Projektabhängigkeiten automatisch herunterzuladen und zu verwalten, erleichtert sbt die Nutzung externer Bibliotheken und Frameworks.
- Inkrementelle Kompilation ' :' sbt kann nur die geänderten Teile des Codes neu kompilieren, was zu einer erheblichen Zeitersparnis während des Entwicklungszyklus führt.
- Anpassbarer Build-Prozess: sbt ist hochgradig anpassbar und ermöglicht es Entwicklern, benutzerdefinierte Build-Einstellungen zu definieren und den Build-Prozess so zu konfigurieren, dass er den individuellen Anforderungen ihrer Projekte entspricht.
- Plugin- Ökosystem: sbt verfügt über ein umfangreiches Plugin-Ökosystem, das die Funktionalität erweitert und zusätzliche Funktionen wie Codequalitätsprüfungen, Bereitstellungsautomatisierung und Testabdeckungsberichte bietet. Die Entwicklung und Integration neuer Plugins wird umfassend unterstützt und gefördert.
- Kontinuierliche Kompilierung und Tests : Mit sbt können Entwickler das System so einstellen, dass es automatisch neu kompiliert und Tests erneut ausführt, sobald eine Quelldatei geändert wird.
- Multi-Projekt-Builds: Für Entwickler, die an mehreren Scala-Projekten arbeiten, bietet sbt hilfreiche Funktionen, um diese innerhalb eines einzigen Builds zu verwalten.
- Interaktive Shell : sbt ist mit einer interaktiven Shell ausgestattet, die Entwicklern eine komfortable Möglichkeit bietet, Aufgaben und Befehle während des gesamten Entwicklungsprozesses auszuführen.
- Parallele Aufgabenausführung: sbt kann Aufgaben parallel ausführen und so die Build-Zeiten für große Projekte beschleunigen.
- Integration mit IDEs: Um das Entwicklungserlebnis zu optimieren, lässt sich sbt nahtlos in gängige integrierte Entwicklungsumgebungen (IDEs) wie IntelliJ IDEA und Visual Studio Code integrieren .
sbt ist das Standard -Build-Tool in der Scala-Community [ 6 ] und wird beispielsweise von den Scala-2- und Scala-3-Compilern selbst [ 7 ] [ 8 ] , dem Play Framework und Lichess , einem beliebten Schachserver, verwendet. Das sbt- Projekt ist „bootstrapped“ – es verwendet sbt , um sich selbst zu kompilieren.
Geschichte
sbt wurde ursprünglich 2008 von Mark Harrah als Open-Source-Projekt veröffentlicht. [ 9 ] Im Laufe der Jahre hat es sich durch zahlreiche Releases, die jeweils neue Funktionen, Fehlerbehebungen und Verbesserungen einführten, deutlich weiterentwickelt. Hier ist eine Übersicht der wichtigsten Releases sowie der wichtigsten Änderungen und Innovationen, die sie mit sich brachten: [ 10 ]
- sbt 0.3.2 (2008): Dies war die erste offizielle Version von sbt . Sie führte grundlegende Funktionen wie Projektdefinition, Abhängigkeitsverwaltung und Kompilierung ein.
- sbt 0.7 (2009): Etablierte das grundlegende Framework für die Erstellung und Verwaltung von Scala-Projekten. Zu den wichtigsten Funktionen gehörten inkrementelle Kompilierung, Abhängigkeitsverwaltung und unkomplizierte Aufgabenausführung.
- sbt 0.10 (2011): Die Syntax der Build-Definition wurde grundlegend überarbeitet und dadurch ausdrucksstärker und flexibler gestaltet. Zudem wurden Leistung, Abhängigkeitsverwaltung und Konfiguration verbessert.
- sbt 0.12 (2012): Verbesserte Unterstützung für Multi-Modul-Projekte, die Möglichkeit, benutzerdefinierte Konfigurationen zu definieren, und vereinfachte Plugin-Entwicklung.
- sbt 0.13 (2013): Fokus auf Benutzerfreundlichkeit und Leistung. Diese Version führte Activator [ 11 ] ein, ein webbasiertes Tool zum Erstellen und Verwalten von Projekten. Weitere Funktionen umfassten die inkrementelle Makrokompilation, eine verbesserte Fehlerbehandlung bei Build-Definitionen und diverse Leistungsoptimierungen. 0.13 blieb die nächsten vier Jahre die Hauptversion von sbt .
- sbt 1.0 (2017): Diese Version führte wesentliche Änderungen am sbt -Quellcode ein, wobei der Fokus auf Leistung und Stabilität lag. Gleichzeitig wurde versucht, die Kompatibilität mit älteren Versionen so weit wie möglich zu erhalten. Zu den neuen Funktionen gehörten eine einheitliche Slash-Syntax für die Definition von Aufgaben und Einstellungen, ein verbessertes Abhängigkeitsmanagement sowie Scala 2.12 als Sprachversion für Build-Definitionen. Darüber hinaus steigerte der Wechsel zum neuen inkrementellen Compiler Zinc 1.0 die Leistung der inkrementellen Kompilierung zusätzlich. [ 12 ]
- sbt 1.1 (2018): Mit dieser Version wurde der sbt -Server eingeführt, der es IDEs und anderen Tools ermöglicht, über das Language Server Protocol (LSP) mit sbt zu interagieren . Außerdem wurde die Unterstützung für plattformübergreifendes Erstellen von Scala.js [ 13 ] und Scala Native [ 14 ] hinzugefügt und die Leistung verschiedener Aufgaben verbessert.
- sbt 1.3 (2019): Diese Version verbesserte die Benutzerfreundlichkeit deutlich, indem sie die Auflösung von Abhängigkeiten durch die Verwendung von Coursier [ 15 ] als Standard-Abhängigkeitsmanager beschleunigte . Weitere Verbesserungen umfassten Optimierungen des Build-Caching-Mechanismus und die Unterstützung für JDK 11.
- sbt 1.5 (2021): Unterstützung für Scala 3 hinzugefügt. Außerdem wurden Verbesserungen an der BSP-Unterstützung (Build Server Protocol) vorgenommen [ 16 ] , wodurch eine bessere Integration mit IDEs ermöglicht wird.
- sbt 1.8 (2022): Diese Version enthielt Aktualisierungen für Coursier und verbesserte die Ivy-Unterstützung.
- sbt 1.9 (2023): Weitere Aktualisierungen von Coursier und ein textbasiertes Menü zur Unterstützung beim Erstellen neuer Projekte.
Build-Dateien
.sbtEin sbt-Build kann mithilfe einer Datei definiert werden [ 17 ] Nachfolgend ein Beispiel für build.sbteine Build-Definition:
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// Die für diesen Build verwendete Scala-Version wird auf 2.13.10 gesetzt. 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" , // Füge eine einzelne Abhängigkeit für Tests hinzu. libraryDependencies += scalaTest % Test )lazy val helloCore = ( project in file ( "core" )) . settings ( name := "Hello Core" , libraryDependencies += scalaTest % Test , // Mehrere Abhängigkeiten hinzufügen. libraryDependencies ++= List ( akkaActor , akkaCluster ) )Anwendungsbeispiel
sbt kann für jeden Build-Befehl aufgerufen werden oder wechselt in den interaktiven Modus, wenn kein Befehl angegeben wird. So bereinigen Sie die Build-Produkte des aktuellen Builds:
$ sbt clean Mehrere Befehle können in derselben Zeile verwendet werden. So führen Sie einen einzelnen Test mit dem Namen „Foo“ aus und veröffentlichen anschließend exportierte JAR-Dateien:
$ sbt "testOnly Foo" publish Erweiterbarkeit und Integration
Die Funktionalität von sbt kann durch eine Plugin-Architektur erweitert werden. [ 18 ] Von der Community beigesteuerte Plugins decken Bereiche wie Signieren, Verpacken, Veröffentlichen und Freigeben von Artefakten, Verbinden mit anderen Diensten wie Blogs und Datenbanken oder Integrieren mit anderen Technologien ab.
Sowohl IntelliJ IDEA als auch VS Code unterstützen sbt über ihre Scala-Plugins. In beiden IDEs ist es möglich, ein neues Projekt mit initialen sbt -Build-Dateien zu erstellen. Falls das Projekt bereits eine sbt -Build-Datei enthält, kann diese verwendet werden, um die Projektkonfiguration für die jeweilige IDE zu generieren. [ 19 ]
Vergleiche
Die wichtigsten Alternativen zu sbt unter den Build-Tools sind Gradle und Apache Maven , beides etablierte Build-Tools für Projekte, die auf der JVM-Plattform entwickelt werden. Im Scala-Ökosystem ist Mill ein weiteres beliebtes Build-Tool. [ 20 ] Die Wahl zwischen sbt , Gradle, Apache Maven und Mill hängt von den spezifischen Anforderungen Ihres Projekts und Ihrer Vertrautheit mit den jeweiligen Tools ab. Wenn Sie hauptsächlich mit Scala arbeiten, eignen sich sbt oder Mill möglicherweise besser, während bei der Arbeit mit mehreren Sprachen oder Technologien eines der beiden anderen Tools die bessere Wahl sein kann.
| sbt | Gradle | Maven | Mühle | |
|---|---|---|---|---|
| Sprache und Zielgruppe | Speziell für Scala- und Java-Projekte entwickelt. Bietet Funktionen, die auf die besonderen Bedürfnisse des Scala-Ökosystems zugeschnitten sind. Wird am häufigsten in Scala-Projekten eingesetzt. | Universell einsetzbar und unterstützt mehrere Sprachen, darunter Java, Groovy, Kotlin, Scala und weitere. Am häufigsten wird es in Java- und Kotlin-Projekten verwendet. | Wird für Java-Projekte verwendet, unterstützt aber über Plugins auch andere Programmiersprachen wie Scala, Groovy und Kotlin. Am häufigsten kommt es in Java-Projekten zum Einsatz. | Es richtet sich primär an Scala-Entwickler, unterstützt aber auch das Kompilieren von Java-Code in gemischten Scala/Java-Projekten. Es wird am häufigsten in Scala-Projekten eingesetzt und ist besonders attraktiv für Entwickler, die Wert auf Einfachheit und Vorhersagbarkeit ihres Build-Tools legen. |
| Syntax der Build-Datei | Die Build-Dateien werden in Scala geschrieben, wobei die Ausdrucksstärke und Typsicherheit von Scala während der Build-Definition genutzt werden. | Build-Dateien können entweder in Groovy oder Kotlin geschrieben werden. Die Syntax tendiert eher zu einer deklarativen Ausdrucksweise. | Verwendet XML zum Schreiben von Projektobjektmodelldateien (POM). Die Syntax ist ausführlicher und deklarativer und bevorzugt eine standardisierte Projektstruktur und Konventionen gegenüber der Konfiguration. | Verwendet reines Scala für seine Build-Dateien. Die Build-Definitionen werden als Scala-Objektdefinitionen geschrieben, und die Tasks werden als Methoden innerhalb dieser Objekte definiert. |
| Inkrementelle Kompilierung | Verfügt über inkrementelle Kompilierung, bei der nur die geänderten Codeabschnitte kompiliert werden, wodurch der Entwicklungsprozess beschleunigt wird. | Unterstützt auch die inkrementelle Kompilierung für Java- und Kotlin-Projekte, aber die Möglichkeiten zur inkrementellen Kompilierung von Scala sind nicht so gut entwickelt wie bei sbt . | Standardmäßig wird inkrementelle Kompilierung nicht unterstützt. Sie kann jedoch über Plugins wie das scala-maven-plugin für Scala-Projekte oder die inkrementelle Kompilierungsfunktion des java-compiler-plugin für Java-Projekte aktiviert werden. | Es bietet inkrementelle Kompilierung. Zusätzlich werden die Ausgaben der Aufgaben aggressiv zwischengespeichert und für jede Aufgabe isolierte Umgebungen verwendet, was die Geschwindigkeit und Genauigkeit der Builds weiter verbessert. |
| Erweiterbarkeit und Plugins | Bietet ein umfangreiches Plugin-Ökosystem, das es Entwicklern ermöglicht, die Funktionalität des Build-Tools zu erweitern. | Aufgrund seiner breiteren Akzeptanz in zahlreichen Sprachen und Plattformen ist das Plugin-Ökosystem von Gradle umfangreicher und vielfältiger als das von sbt . | Verfügt aufgrund seiner langen Geschichte und breiten Akzeptanz innerhalb der Java-Community über ein größeres und ausgereifteres Plugin-Ökosystem als sbt . | Verfügt über ein kleineres Plugin-Ökosystem als sbt , unterstützt aber Erweiterbarkeit auf eine andere Weise: In Mill können Sie wiederverwendbare Module und Bibliotheken direkt in Ihren Build-Dateien in reinem Scala definieren. Sie können auch Scala-Bibliotheken von Drittanbietern in Ihre Build-Dateien importieren und verwenden. |
| Leistung | Nutzt Leistungsoptimierungen wie inkrementelle Kompilierung und parallele Aufgabenausführung, die Ergebnisse variieren jedoch je nach Projektkomplexität und spezifischen Anwendungsfällen. | Der Fokus liegt auf der Leistungsfähigkeit; zur Beschleunigung der Builds wird ein im Hintergrund laufender Daemon-Prozess genutzt. | Standardmäßig werden weder inkrementelle Kompilierung noch parallele Ausführung unterstützt. Beides lässt sich jedoch mithilfe von Plugins und Optionen des Build-Tools realisieren. | Unterstützt inkrementelle Kompilierung und parallele Ausführung. Verfolgt im Allgemeinen einen aggressiveren Ansatz beim Caching, was im Vergleich zu sbt oft zu schnelleren inkrementellen Build-Zeiten führt , insbesondere bei größeren Projekten. |
| Lebenszyklus des Build-Prozesses | Verwendet eine komplexe domänenspezifische Sprache (DSL) für Build-Definitionen und bietet so eine feinere Kontrolle über den Build-Prozess. | Seine domänenspezifische Sprache ist einfacher als die von sbt , deklarativer und wirkt für Anfänger möglicherweise intuitiver. | Führt einen festen Build-Lebenszyklus ein, der aus klar definierten Phasen wie Kompilieren, Testen, Verpacken, Installieren usw. besteht. Dadurch bietet Maven eine konsistente Struktur über alle Projekte hinweg, jedoch mangelt es an Flexibilität. | Builds werden anhand von Aufgaben definiert. Jede Aufgabe stellt eine Arbeitseinheit innerhalb eines Builds dar, wie beispielsweise das Kompilieren eines Moduls, das Ausführen von Tests oder das Erstellen eines Pakets. Aufgaben können voneinander abhängen. Mill sorgt dafür, dass die Aufgaben in der richtigen Reihenfolge ausgeführt werden. |
| Gemeinschaft | Verfügt über eine aktive, hilfsbereite Community, die sich hauptsächlich auf die Programmiersprache Scala konzentriert. | Ihre Community ist umfangreicher und vielfältiger als die von sbt und konzentriert sich auf verschiedene Programmiersprachen und Technologien. | Ihre Community ist größer und vielfältiger und deckt mehrere Programmiersprachen und Technologien ab. | Mill ist ein aktiv weiterentwickeltes Open-Source-Projekt. Die dazugehörige Community ist zwar nicht so groß oder etabliert wie die um sbt , aber sie ist aktiv und engagiert. |
Siehe auch
Referenzen
- ^ „Lightbend überträgt die Eigentumsrechte an sbt an das Scala Center“ . scala-lang.org . 25. August 2023. Abgerufen am 8. März 2024 .
- ^ eed3si9n (03.11.2024). „Releases“ . github.com . Abgerufen am 06.11.2023 .
{{cite web}}: CS1 maint: numeric names: authors list (link) - ^ eed3si9n (2024-11-03). "1.10.5" . github.com . Abgerufen am 2023-11-06 .
{{cite web}}: CS1 maint: numeric names: authors list (link) - ^ „sbt Reference Manual — Frequently Asked Questions“ . www.scala-sbt.org . Abgerufen am 15.06.2023 .
- ^ „sbt Reference Manual — sbt Reference Manual“ . www.scala-sbt.org . Abgerufen am 15.06.2023 .
- ^ „Gemeinsam bessere Software entwickeln“ . GitHub . Abgerufen am 15.06.2023 .
- ^ Willkommen! , Die Programmiersprache Scala, 14.06.2023 , abgerufen am 15.06.2023
- ^ Dotty , Labor für Programmiermethoden EPFL, 14.06.2023 , abgerufen am 15.06.2023
- ^ „sbt Reference Manual — Developer's Guide (Work in progress)“ . www.scala-sbt.org . Abgerufen am 15.06.2023 .
- ^ „Releases · sbt/sbt“ . GitHub . Abgerufen am 15.06.2023 .
- ^ „Typesafe Activator 1.3.0 veröffentlicht: Enthält neuen sbt-Server und neue Benutzeroberfläche | @lightbend“ . Lightbend . Abgerufen am 15.06.2023 .
- ^ „Beschleunigen Sie die Kompilierzeiten mit Zinc 1.0“ . www.scala-lang.org . 3. November 2017. Abgerufen am 15. Juni 2023 .
- ^ "Scala.js" . Scala.js . Abgerufen am 15.06.2023 .
- ^ „Scala Native – Scala Native 0.4.14 Dokumentation“ . scala-native.org . Abgerufen am 15.06.2023 .
- ^ „Coursier · Pure Scala Artifact Fetching“ . get-coursier.io . Abgerufen am 15.06.2023 .
- ^ „Build Server Protocol“ . build-server-protocol.github.io . Abgerufen am 15.06.2023 .
- ^ sbt: .sbt Build-Definition
- ^ "Plugins" . sbt . Abgerufen am 17. Oktober 2014 .
- ^ „Wie erstelle ich ein SBT-Projekt mit IntelliJ IDEA?“ . Stack Overflow . Abgerufen am 05.04.2026 .
- ^ „Einführung in Mill :: Mill“ . mill-build.com . Abgerufen am 15.06.2023 .
