2012-07-27 7 views
8

Bevor ich so etwas wie diese (vereinfacht) hatte, mit sbt 0.11.3:Mischen build.sbt mit Projekt/Build.scala und aggregiert

// project/Build.scala 
import sbt._ 
import Keys._ 

object MyBuild extends Build { 
    lazy val standardSettings = Defaults.defaultSettings ++ Seq(
     version  := "0.2", 
     scalaVersion := "2.9.2" 
    ) 

    lazy val main = Project(
     id  = "main", 
     base  = file("."), 
     settings = standardSettings, 
     aggregate = Seq(sub) 
    ) 

    lazy val sub = Project(
     id  = "main-sub", 
     base  = file("sub"), 
     settings = standardSettings 
    ) 
} 

Aber ich will in der so viele Informationen wie möglich halten Ebene build.sbt Datei. So, jetzt habe ich

// build.sbt 
version  := "0.2" 

scalaVersion := "2.9.2" 

Und

// project/Build.scala 
import sbt._ 
import Keys._ 

object MyBuild extends Build { 
    lazy val main = Project(
     id  = "main", 
     base  = file("."), 
     aggregate = Seq(sub) 
    ) 

    lazy val sub = Project(
     id  = "main-sub", 
     base  = file("sub") 
    ) 
} 

Aber das scheint nicht von build.sbt in die Teilprojekte in meinen Einstellungen zu mischen:

> show version 
[info] main-sub/*:version 
[info] 0.1-SNAPSHOT 
[info] main/*:version 
[info] 0.2 
> show scala-version 
[info] main-sub/*:scala-version 
[info] 2.9.1 
[info] main/*:scala-version 
[info] 2.9.2 

Wie hier Abhilfe zu schaffen? Ich habe auch versucht, das Teilprojekt settings explizit hinzuzufügen, z.

  • settings = Defaults.defaultSettings
  • settings = Project.defaultSettings
  • settings = MyBuild.settings
  • settings = main.settings

(sicher tun ?! dies sollte) ... aber keiner arbeitete.

+1

Das [sbt Dokument für mehrere Projekte] (https://github.com/harrah/xsbt/wiki/Getting-Started-Multi-Project) hat fast meinen Fall. Es behauptet, dass die Hauptdatei 'build.sbt' mit' .sbt' Dateien aus Unterprojekten zusammengeführt wird. Es gibt sogar ein Beispiel für das Überschreiben der Version, aber es zeigt keine Vererbung an, was nach meinem Lesen dieses Dokuments geschehen sollte. –

Antwort

8

Die Information ist ein bisschen im letzten Abschnitt von sbt's Multi Projects documentation versteckt:

Wenn eine einzelne Datei .scala die verschiedenen Projekte Einstellung mit sich, es ist eine einfache Wiederverwendung Einstellungen über verschiedene Projekte hinweg verwenden. Aber selbst wenn Sie verschiedene build.sbt Dateien verwenden, können Sie die Einstellungen für alle Projekte aus dem Haupt-Build leicht freigeben, indem Sie den Bereich ThisBuild verwenden, damit eine Einstellung global angewendet wird.

So:

// build.sbt 
version in ThisBuild := "0.2" 

scalaVersion in ThisBuild := "2.9.2" 

Wow, das große Zeit saugt, wenn Sie zwei Dutzend Schlüssel haben.

+1

Sie könnten 'inScope (Scope (Select (ThisBuild), Global, Global, Global)) (Seq (... eine Reihe von Einstellungen ...))', die automatisch alle diese Einstellungen in 'ThisBuild' erstreckt. – Dan

+0

Hat dies geändert ? Der Link leitet weiter und die resultierende Seite bezieht sich nicht auf "ThisBuild"? –

+0

Die neue Dokumentation verweist auf die Seitenbereiche, auf denen "ThisBuild" erwähnt wird, und ja, sie ist weiterhin gültig. –