2012-10-02 25 views
8

Tengo varios proyectos SBT que tienen una configuración común, p. módulo múltiple, configuración de publishTo, etc.Configuración de compilación SBT

¿Cómo proporciono un campo común, p. ¿Clase CommonBuild que cada uno de los proyectos puede extender desde allí? Por ejemplo:

trait CommonBuild { 
    val publishSettings = Seq(
    publishTo := Some("", ""), 
    credentials += ... 
) 

    def module(name: String) (
    settings: Seq[Setting[_]], 
    projectId: String = PROJECT + "-" + name, 
    dirName: String = name, 
    srcPath: String = PROJECT + name 
    ) = Project(projectId, file(dirName), settings = (buildSettings ++ srcPathSetting(projectId, srcPath)) ++ publishSettings ++ settings) 

} 

Ahora que puede ser utilizado por un proyecto de construcción:

object ProjABuild extends CommonBuild { 
    // use CommonBuild methods/vals 
} 

object ProjBBuild extends CommonBuild { 
    // use CommonBuild methods/vals 
} 
+0

¿Estos proyectos están dedicados a proyectos Sbt, o son subproyectos Sbt? –

+0

Los proyectos A y B son proyectos Sbt dedicados, no subproyectos/módulos. – Dzhu

+1

parece que tal vez la pregunta es un caso especial de cómo usar el código de biblioteca externa en build.scala? eso lograría tu objetivo, ¿verdad? – Owen

Respuesta

3

que quería hacer esto también. Es importante destacar que la configuración común necesita vivir en su propio proyecto del que dependen los subproyectos, de modo que un cambio realizado en la configuración común se aplique automáticamente en todos los subproyectos. La única forma de lograr esto es poner lo común en un plugin SBT.

Escribí tal complemento, llamado iesl-sbt-base. Proporciona un montón de texto estándar, por lo que el archivo Build.scala para su proyecto puede ser trivialmente corto. Proporciona: configuración

  • Resolver
  • simplificado resolución de dependencias con actualización automática
  • claridad en lo dependencias transitivas se utilizan
  • Protección opcional de las versiones instantáneas
  • configuración de registro limpien con agua

Consulte https://github.com/iesl/iesl-sbt-base para más detalles. Probablemente querrás cambiar eso para cambiar cosas que son específicas de mi configuración (p. Ej., Especialmente las URL de resolución). Si hay demanda, puedo pensar en cómo hacerlo más configurable.

+0

Eso es increíble gracias David! – Dzhu

Cuestiones relacionadas