Build-Tool: Bazel 5.0 verändert den Umgang mit externen Dependencies

Das zweite LTS-Release für Bazel ist erschienen. Es führt ein neues External-Dependency-System ein und erweitert seine Sprache Starlark um neue Funktionen.

In Pocket speichern vorlesen Druckansicht 3 Kommentare lesen

(Bild: nattaphol phromdecha/Shutterstock.com)

Lesezeit: 3 Min.
Von
  • Maika Möbus
Inhaltsverzeichnis

Google hat das Build-Werkzeug Bazel in Version 5.0 veröffentlicht. Das Release bringt Long-term Support (LTS) und einige Neuerungen mit, darunter den experimentellen Einsatz des neuen External-Dependency-Subsystems Bzlmod. Die zum Ausführen von Bazel benötigte JDK-Version steigt auf OpenJDK 11 an, allerdings bleibt das Kompilieren von Binaries, die JDK 8 oder früher verwenden, weiterhin möglich.

Das Build- und Test-Tool Bazel soll Make, Maven und Gradle ähneln und sich für Java, C++, Android, iOS, Go und weitere Sprachplattformen eignen. Dabei soll es unter anderem dank lokalem und verteiltem Caching und paralleler Ausführung für schnelle und inkrementelle Builds sorgen sowie skalier- und erweiterbar sein. Es steht als Open Source unter Apache-2.0-Lizenz bereit.

Bazel kann von Targets anderer Projekte abhängen, deren Abhängigkeiten unter der Bezeichnung External Dependencies laufen. In Version 5.0 führt Bazel das neue External-Dependency-Subsystem mit dem Codenamen Bzlmod ein, um Nachteile des bisherigen Systems zu beheben, die sich offenbar nicht auf inkrementelle Weise lösen ließen.

Bzlmod ist standardmäßig deaktiviert und lässt sich mit dem experimentellen Flag --experimental_enable_bzlmod aktivieren. Im Gegensatz zum alten System, das auf WORKSPACE basierte und sich um Repositorys drehte, stützt es sich auf die MODULE.bazel-Datei und fokussiert sich auf Module. Details zum neuen System verrät die Dokumentation.

Die von Python 3 inspirierte Bazel-Sprache Starlark hat einige neue Funktionen gewonnen, darunter das Nesting von def-Statements (Closures) und Lambda-Ausdrücken (Anonymous Functions). Das neue Flag --incompatible_existing_rules_immutable_view soll die bestehenden Funktionen native.existing_rule und native.existing_rules effizienter gestalten, indem es unveränderliche, Dict-ähnliche View-Objekte anstatt änderbarer Dicts ausgibt. Die Betreuung der Starlark-Rust-Bibliothek übernahm im letzten Jahr Meta, damals noch Facebook, in Absprache mit Google.

Neuerungen gibt es in Bazel 5.0 auch für Java-Regeln: Sie verwenden nun Toolchain Resolution. Bisher fanden sie die Java-Toolchain sowie das JDK mittels der Kommandozeilenoptionen --javabase, --java_toolchain, --host_javabase und --host_java_toolchain. Die Neuerung soll der Einheitlichkeit innerhalb von Bazel sowie dem Verwenden mehrerer Plattformen zugutekommen.

Bazel 5.0 ist nach Bazel 4.0 das zweite Release mit Long-term Support (LTS). Jeder LTS-Branch soll neun Monate mit kritischen Bugfixes, aber keinen neuen Features versehen werden. Danach folgen zwei Jahre in der Maintenance-Phase, in der Fixes auf Security und Betriebssystemkompatibilität beschränkt sind.

Auf GitHub ist das Open-Source-Tool in der neuen Version zu finden. Offiziell lässt sich Bazel unter Ubuntu Linux, macOS und Windows installieren. Daneben verwalten Community-Mitglieder weitere Packages etwa für Arch Linux oder FreeBSD.

Alle weiteren Informationen zu Bazel 5.0 sind dem Bazel-Blog zu entnehmen.

(mai)