2013-10-31 19 views
5

Ho diversi progetti SBT 0.13/Play 2.2 (siti Web). Sono tutti multi-modulo in quanto condividono alcune funzionalità comuni. Ciò rende i loro file di configurazione del progetto sia complessi che quasi identici, ma non del tutto.Come utilizzare configurazioni condivise su più progetti SBT (Play)?

Mi piacerebbe essere in grado di condividere il più possibile di questi file di configurazione tra i progetti (aggiornamenti di riproduzione frequenti rendono il mantenimento di siti Web 5+ un dolore reale, per non parlare di quasi tutti identici, ma- l'evoluzione delle liste di dipendenza tra i progetti).

build.properties e plugins.sbt sono identici tra i progetti e possono essere sovrascritti da un semplice script. Grande.

Build.scala è più complicato - Vorrei introdurre una classe base condivisa in questo modo:

abstract class MyBuildBase extends Build { ... } 

che nel Build.scala fare:

object ApplicationBuild extends MyBuildBuild { ... } 

Affinché questo per fare qualsiasi senso, MyBuildBase.scala deve essere condiviso tra i progetti. Questo può essere fatto con svn: external, che opera sulle directory. Il che significa che ho bisogno in qualche modo di rendere questa directory condivisa accessibile quando Build.scala è compilato (altrimenti sbt si lamenta rumorosamente).

Leggere http://www.scala-sbt.org/0.13.0/docs/Detailed-Topics/Classpaths.html e http://www.scala-sbt.org/0.13.0/docs/Getting-Started/Full-Def.html sembra che questo dovrebbe essere possibile.

Tuttavia, è estremamente poco chiaro per me cosa inserire effettivamente nel file progetto/progetto/Build.scala per ottenere effettivamente questo: non riesco a trovare un esempio di "un file di creazione di sbt che è destinato a creare un sbt build file e include alcuni file sorgente aggiuntivi nella build ".

Qualche suggerimento?

risposta

6

Quello che probabilmente si vorrebbe fare è creare un plugin o una libreria condivisa.

Si può fare un progetto di SBT con una build come segue:

build.sbt

sbtPlugin := true 

organization := "you" 

name := "common-build" 

version := "1.0" 

Poi creare nel src/main/scala vostra classe astratta "MyBuildBase". Rilascia questo progetto come plugin sbt.

Quindi negli altri progetti, è possibile utilizzarlo come libreria/plug-in. In project/plugins.sbt aggiungere:

addSbtPlugin("you" % "common-build" % "1.0") 

E questo risolverà il libreria di accumulo comune quando si costruisce il vostro costruire.

Se hai bisogno di ulteriori informazioni, guarda di più sui plugin di sbt e ignora la parte relativa alla creazione di qualcosa che estenda un plugin. I plugin sono solo librerie con il numero di versione di sbt e il tuo. Dovresti essere in grado di inserire qualsiasi codice che desideri lì per condividere tra le build.

+0

Eccellente suggerimento. Risulta che SVN è in grado di gestire file esterni e non solo directory dalla v1.6, quindi l'ho risolto in questo modo, in quanto era più semplice nel mio caso particolare. Tuttavia, la tua risposta copre la domanda che ho effettivamente posto, contrassegnandola come tale. – Jxtps

Problemi correlati