Blog

Git-Unterprojekt-Kompilierzeit-Abhängigkeiten in Sbt

Cristiana

Cristiana

Aktualisiert Oktober 22, 2025
2 Minuten
Als ich vor kurzem ein sbt-Projekt erstellt habe, habe ich versucht, ein Projekt einzubinden, für das es keine Versionen gibt. Das bedeutet, dass das Einbinden über libraryDependencies in der build.sbt nicht funktioniert. Eine Option ist, das Projekt zu klonen und lokal zu veröffentlichen, aber das ist mühsame Handarbeit, die jedes Mal wiederholt werden muss, wenn sich das geklonte Projekt ändert.Die meisten Beispiele erklären, wie man eine direkte Kompilierzeitabhängigkeit von einem Git-Repository zu sbt hinzufügt, aber sie zeigen nur, wie man ein einzelnes Projekt-Repository als Abhängigkeit mit einem RootProject hinzufügt. Nach einiger Suche habe ich die Lösung gefunden, um Projekte aus einem Multiprojekt-Repository hinzuzufügen. Anstelle von RootProject sollte ProjectRef verwendet werden. Dies ermöglicht ein zweites Argument zur Angabe des Unterprojekts im Repository. Dies ist meine aktuelle Datei project/Build.scala:
import sbt.{Build, Project, ProjectRef, uri}
object GotoBuild extends Build {
  lazy val root = Project("root", sbt.file(".")).dependsOn(staminaCore, staminaJson, ...)
  lazy val staminaCore = ProjectRef(uri("git://github.com/scalapenos/stamina.git#master"), "stamina-core")
  lazy val staminaJson = ProjectRef(uri("git://github.com/scalapenos/stamina.git#master"), "stamina-json")
  ...
}
Diese Unterprojekte sind nun eine Kompilierzeit-Abhängigkeit und sbt zieht das Repository in ~/.sbt/0.13/staging/[sha]/stamina ein und verwaltet es. Es ist also kein manuelles Auschecken mit lokaler Veröffentlichung erforderlich. Das ist sehr praktisch, wenn man von einem internen unabhängigen Projekt/Modul abhängig ist und nicht für jede Änderung eine neue Version erstellen muss. (Eine Randbemerkung ist, dass mein IntelliJ derzeit nicht erkennt, dass sich die Bibliothek im Class/Source-Pfad des Hauptprojekts befindet, so dass es sich beschwert, dass es keine Symbole finden kann und daher keine ordnungsgemäße Syntaxprüfung und automatische Vervollständigung durchführen kann).

Verfasst von

Cristiana

Some bio goes here

Contact

Let’s discuss how we can support your journey.