2017-10-04 3 views
1

Pro SBT documentation, "Ein Projekt wird durch Deklarieren einer verzögerten Wert vom Typ Projekt definiert."Warum werden SBT-Projekte als Lazy Vals deklariert?

Das ist sicherlich die Norm, und was wir tun, aber ich frage mich, was, wenn überhaupt, der Grund ist, dass es faul sein muss.

Mit einem normalen val anstelle von lazy valscheint zu arbeiten. Natürlich führt die Verwendung von strikten Vals dazu, dass die Projektdefinitionen der Reihe nach initialisiert werden, was bedeutet, dass Vorwärtsreferenzen nicht funktionieren und Projekte in Abhängigkeitsreihenfolge definiert werden müssen.

Für einen relativ großen Build, mit 53 voneinander abhängigen Projekten, ist die Reihenfolge, die erzwungen wird, tatsächlich ein Good Thing ™, also habe ich mich gefragt, ob es einen wirklichen Grund gibt, lazy val zu verwenden - abgesehen davon, dass Definitionen in beliebiger Reihenfolge vorkommen dürfen.

Antwort

2

Dies ist eine gängige "Best Practice". Ich habe niemanden gesehen, der dies explizit angibt, aber aus meiner Erfahrung ist diese Praxis mit einigen wenigen Merkmalen von sbt verbunden.

  1. sbt parst jede*.sbt Datei
  2. sbt wertet einen *.sbt Datei von oben nach unten
  3. Sie Abhängigkeiten zwischen alles in mehreren sbt Dateien erstellt wurden, können

Nun stellen Sie Ihre strukturieren build.sbt für Lesbarkeit. Wir haben einige gemeinsame Einstellungen und 3 Projekte (eine Wurzel und zwei Builds)

val root = project.in(file(".")) 
     .settings(commonSettings) 
     .aggregate(api, server) 

val api = project.in(file("api")) 
     .settings(commonSettings) 
     .settings(name := "server") 

val server= project.in(file("api")) 
     .settings(commonSettings) 
     .settings(name := "api") 
     .dependsOn(api) 

val commonSettings = Seq(organization := "com.example") 

sbt wird nicht gestartet, da mehrere Dinge falsch sind in diesem build.sbt

  1. Die api und server Modul sind in der referenzierten root Projekt, bevor sie
  2. commonSettings definiert sind, wird vor seiner Definition in allen Projekten verwiesen

Ohne alles zu machen lazy wird es schwierig, Ihre Build-Dateien zu refaktorieren. Dies ist der Grund, warum alle sbt Dokumentation lazy val s alle verwendet. Um Verwirrung und Frustration für Erstbenutzer zu vermeiden.

hoffe das hilft, Muki

Verwandte Themen