2012-07-27 12 views
8

Antes de que tuviera algo como esto (simplificado), utilizando SBT 0.11.3:Mezcla build.sbt con proyecto/Build.scala y agregados

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

Pero quiero mantener la mayor cantidad de información posible en el archivo simple build.sbt. Así que ahora tengo

// build.sbt 
version  := "0.2" 

scalaVersion := "2.9.2" 

Y

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

Pero eso no parece mezclar en mi configuración de build.sbt en los sub proyectos:

> 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 

cómo remediar esto? También intenté agregar settings explícito al subproyecto, p.

  • settings = Defaults.defaultSettings
  • settings = Project.defaultSettings
  • settings = MyBuild.settings
  • settings = main.settings (seguro de que esto debería hacer ?!)

... pero ninguno funcionó.

+1

El [sbt doc fur multi projects] (https://github.com/harrah/xsbt/wiki/Getting-Started-Multi-Project) casi tiene mi caso. Afirma que el 'build.sbt' principal se fusionará con los archivos' .sbt' de los subproyectos. Incluso da un ejemplo de anulación de la versión, sin embargo, no demuestra la herencia, lo que debería ocurrir de acuerdo con mi lectura de ese documento. –

Respuesta

8

La información es un poco escondido en la última sección de sbt's Multi Projects documentation:

Al tener una sola .scala archivo de configuración de los diferentes proyectos, que es fácil de utilizar la configuración de reutilización a través de diferentes proyectos. Pero incluso cuando se usan diferentes archivos build.sbt, aún es fácil compartir la configuración en todos los proyectos desde la compilación principal, utilizando el alcance ThisBuild para hacer que una configuración se aplique globalmente.

Por lo tanto:

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

scalaVersion in ThisBuild := "2.9.2" 

Vaya, que chupa gran momento si tiene dos teclas docena.

+1

Podría hacer 'inScope (Ámbito (Seleccionar (ThisBuild), Global, Global, Global)) (Seq (... un conjunto de configuraciones ...))' que automáticamente abarca todas esas configuraciones en 'ThisBuild' – Dan

+0

Tiene esto cambiado? ¿El enlace redirige y la página resultante no se refiere a 'ThisBuild'? –

+0

La nueva documentación enlaza a las páginas 'ámbitos' donde se menciona 'ThisBuild', y sí, sigue siendo válida. –