Build-Tool sbt 1.3 wechselt zum Library Management mit Coursier
Als Alternative zu Dependency Resolver wie Ivy baut das Werkzeug beim Library Management nun auf das in Scala neu geschriebene Coursier.
![Build-Tool sbt für Scala und Java erreicht Version 1.0](https://heise.cloudimg.io/width/610/q85.png-lossy-85.webp-lossy-85.foil1/_www-heise-de_/imgs/18/2/7/4/5/8/3/2/build-aeabf2eeb544cedc.jpeg)
Das Open-Source-Build-Tool sbt liegt ab sofort mit Versionsnummer 1.3 vor – knapp fünf Monate nachdem der erste Release Candidate von sbt 1.3 veröffentlicht wurde. Neben einer Reihe von Fehlerbereinigungen, Performanceverbesserungen und der Anpassung an JDK 11 sind Neuerungen in das Werkzeug eingeflossen, die sich auf die Kompatibilität zu früheren Versionen auswirken – darunter das neue Library Management mit Coursier, die Super Shell sowie die ClassLoader-Verwaltung.
Alternativer Dependency Resolver Coursier
Für das Library Management kamen bisher hauptsächlich Dependency Resolver wie Apache Ivy zum Einsatz. Für Version 1.3 haben die sbt-Macher nun aber einen Wechsel auf den in Scala neu geschriebenen Resolver Coursier vorgesehen, der sich vor allem durch höhere Geschwindigkeit auszeichnen soll. Da Coursier unter bestimmten Bedingungen – beispielsweise wenn Remote-Snapshots für 24 Stunden zwischengespeichert werden – Abhängigkeiten nicht auf die gleiche Weise wie Ivy auflöst, können sbt-Nutzer bei Bedarf in der build.sbt die Verwendung von Coursier deaktivieren:
ThisBuild / useCoursier := false
Erweitertes ClassLoader Layering
Das ClassLoader Layering des Build-Tools bietet in der neuen Version einen Turbo-Modus. Bei der Auswertung der Run- und Test-Tasks erstellt sbt bisher immer zweistufige ClassLoader. Die oberste Schicht des ClassLoaders enthält die Scala Library Jars, sodass die Klassen im Scala-Paket über mehrere Aufgabenauswertungen hinweg wiederverwendet werden können. Die zweite Schicht lädt den Rest des Projektklassenpfades einschließlich der Bibliotheksabhängigkeiten und Projektklassendateien. Ab sbt 1.3.0 steht nun die noch als experimentell gekennzeichnete classLoaderLayeringStrategy
-Funktion zur Verfügung.
Dabei erstellt unter anderem ClassLoaderLayeringStrategy.AllLibraryJars
einen dreischichtigen ClassLoader, in dem ergänzend zu den Scala-Standard-Librarys auch Bibliotheksabhängigkeiten vorgehalten werden. Dadurch sollen sich nicht nur die Antwortzeiten bei Run- und Test-Tasks verkürzen, sondern auch die Latenzen beim wiederholten Start innerhalb der gleichen Session.
Super Shell verschafft Überblick bei den Tasks
Wenn sbt in einem ANSI-kompatiblen Terminal läuft, können sich Entwickler einen Überblick der laufenden Tasks verschaffen. Die Darstellung in dieser Super Shell zeigt sowohl die parallel verarbeiteten Tasks wie auch die Aufgabenverteilung innerhalb des Builds. Neu in sbt ist darüber hinaus die Möglichkeit, die Verarbeitung individueller auf Dateien basierender Tasks durch sogenannte Hilfstasks inkrementeller zu gestalten.
Eine Zusammenfassung sämtlicher Neuerungen in sbt 1.3 findet sich im Blogbeitrag von Eugene Yokota aus dem Scala-Team von Lightbend. Nähere Details bietet darüber hinaus die Projektsite auf GitHub. Eine umfassende Dokumentation sowie Download-Archive stehen auf der Homepage parat.
Die Entwicklung des Build-Werkzeugs, das neben Scala auch Java unterstützt, ist maßgeblich von der Community getrieben. Zu den prominentesten Unterstützern gehört aber auch Lightbend, die Firma hinter der Programmiersprache Scala. Der Name sbt steht für Scala Build Tool beziehungsweise Simple Build Tool. Für die Scala-Entwicklung gilt sbt als Standardwerkzeug und ist vergleichbar mit Maven oder Ant in der Java-Welt. (map)