2012-07-27 14 views
8

Przed miałem coś takiego (uproszczony), stosując SBT 0.11.3:Mieszanie build.sbt z projektu/Build.scala i agreguje

// 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 
    ) 
} 

Ale chcę zachować jak najwięcej informacji, jak to możliwe w zwykły plik build.sbt. Więc teraz mam

// build.sbt 
version  := "0.2" 

scalaVersion := "2.9.2" 

And

// 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") 
    ) 
} 

Ale to nie wydaje się mieszać w moje ustawienia z build.sbt do projektów cząstkowych:

> 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 

Jak temu zaradzić? Próbowałem również dodać wyraźny settings do podprojektu, np.

  • settings = Defaults.defaultSettings
  • settings = Project.defaultSettings
  • settings = MyBuild.settings
  • settings = main.settings (na pewno ten powinien zrobić ?!)

... ale nikt nie pracował.

+1

[sbt doc fur multi projects] (https://github.com/harrah/xsbt/wiki/Getting-Started-Multi-Project) prawie ma moją sprawę. Twierdzi, że główny plik 'build.sbt' zostanie połączony z plikami' .sbt' z podprojektów. Daje nawet przykład nadpisania wersji, jednak nie demonstruje dziedziczenia, co powinno nastąpić zgodnie z moim odczytaniem tego dokumentu. –

Odpowiedz

8

Informacja jest nieco ukryty w ostatniej części sbt's Multi Projects documentation:

przypadku posiadania jednego .scala plik konfigurowania różnych projektów, to łatwy w użyciu ustawienia ponownego wykorzystania w różnych projektach. Ale nawet przy korzystaniu z różnych plików build.sbt nadal można łatwo udostępniać ustawienia we wszystkich projektach z głównej wersji, korzystając z zakresu ThisBuild, aby ustawienie miało zastosowanie globalnie.

Zatem:

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

scalaVersion in ThisBuild := "2.9.2" 

Wow, że bani jeśli masz dwa tuziny klucze.

+1

Możesz zrobić 'inScope (Zakres (Wybierz (ThisBuild), Globalny, Globalny, Globalny)) (Seq (... garść ustawień ...))', który automatycznie dopasuje wszystkie te ustawienia do 'ThisBuild'a – Dan

+0

Ma to zmienić? Link przekierowuje, a wynikowa strona nie odnosi się do "ThisBuild"? –

+0

Nowa dokumentacja zawiera odnośniki do stron "zakresów", w których wspomniano o 'ThisBuild', i tak, jest ono nadal aktualne. –