Thema: build-tools
-
Cargo, Crates und Editions: wie ein Rust-Projekt gebaut und versioniert wird
Cargo baut ein Crate aus Cargo.toml, löst Abhängigkeiten mit SemVer-kompatiblen Bereichen in Cargo.lock auf und kann zwei inkompatible Hauptversionen desselben Crates in einem einzigen Build enthalten. Editions sind pro Crate wählbare Sprachversionen, die zusammenarbeiten, sodass das Anheben der Edition eines Crates dessen abhängige Crates nie zum Mitziehen zwingt.
-
Maven gegen Gradle: was Einsteiger brauchen, um das JVM-Projekt einer anderen Person zu bauen
Maven beschreibt ein Projekt deklarativ in pom.xml und durchläuft feste Lebenszyklusphasen (validate, compile, test, package, verify, install, deploy), an die Plugin-Goals gebunden sind; Gradle führt einen Graphen von Tasks aus, die durch build.gradle(.kts)-Skripte und Plugins konfiguriert werden. Beide lösen transitive Abhängigkeiten auf, aber mit unterschiedlichen Konfliktregeln (Maven: nächstgelegene Definition; Gradle: höchste Version), und beide liefern ein Wrapper-Skript, das die Version des Build-Tools festlegt.
-
make als Task-Runner: Phony-Targets, Tabulatoren und eine Shell pro Zeile
Ein Makefile ist ein brauchbarer Einstiegspunkt für die Befehle eines Repositorys, wenn Befehls-Targets als .PHONY deklariert werden, Rezeptzeilen mit einem Tabulator beginnen und klar ist, dass jede Rezeptzeile in einer eigenen Shell läuft, sofern nicht .ONESHELL gesetzt ist; das Standardziel sollte harmlos bleiben und echte Dateiabhängigkeiten sollten echt bleiben.
-
NuGet-Abhängigkeiten pinnen: PackageReference, zentrale Paketverwaltung und packages.lock.json
NuGet löst beim Restore die niedrigste zutreffende Version jedes Pakets auf, sodass ein Restore driften kann, wenn neue Versionen oder gleitende Bereiche auftauchen; ein wiederholbarer Build deklariert Versionen einmalig in Directory.Packages.props, aktiviert RestorePackagesWithLockFile, damit packages.lock.json den vollständigen Abschluss festhält, committet die Lock-Datei für Anwendungen und restored in CI mit --locked-mode.
Maschinenlesbar: JSON