2012-10-02 28 views
8

Ho diversi progetti SBT che hanno tutti una configurazione comune - ad es. multi module, publishTo settings etc etc.Impostazioni di configurazione comuni SBT

Come faccio a fornire un codice comune ad es. Classe CommonBuild che ognuno dei progetti può estendere da esso? Per esempio:

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) 

} 

Ora può essere usato da un accumulo di progetto:

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

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

Questi progetti sono dedicati a progetti Sbt o sono sottoprogetti Sbt? –

+0

I progetti A e B sono progetti Sbt dedicati, non progetti secondari/moduli. – Dzhu

+1

sembra che la domanda sia un caso particolare su come utilizzare il codice della libreria esterna in build.scala? che raggiungerebbe il tuo obiettivo, giusto? – Owen

risposta

3

ho voluto fare anche questo. È importante sottolineare che l'impostazione comune deve vivere nel proprio progetto da cui dipendono i progetti secondari, in modo che una modifica apportata all'impostazione comune abbia automaticamente effetto in tutti i sottoprogetti. L'unico modo per farlo è mettere le cose comuni in un plugin SBT.

Ho scritto un tale plug-in, chiamato iesl-sbt-base. Fornisce una pila di regole, in modo che il file Build.scala per il tuo progetto possa essere banalmente breve. Esso prevede: configurazione

  • Resolver
  • risoluzione delle dipendenze semplificata con aggiornamento automatico
  • chiarezza su ciò che le dipendenze transitive sono utilizzati
  • protezione opzionale da versioni offline
  • configurazione di registrazione Pulizia effettuata

Si prega di vedere https://github.com/iesl/iesl-sbt-base per i dettagli. Probabilmente vorrai indicarlo per cambiare le cose che sono specifiche della mia configurazione (ad esempio, soprattutto gli URL del resolver). Se c'è una domanda, posso pensare a come renderla più configurabile.

+0

È fantastico, grazie David! – Dzhu

Problemi correlati