2012-10-02 12 views
8

Ich habe mehrere SBT-Projekte, die alle ein gemeinsames Setup haben - z. Multimodul, publishTo Einstellungen etc usw.SBT allgemeine Build-Einstellungen

Wie stelle ich eine gemeinsame z. CommonBuild-Klasse, die jedes der Projekte daraus erstrecken kann? Zum Beispiel:

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) 

} 

Jetzt kann es durch ein Projekt Build verwendet werden:

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

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

Sind diese Projekte Sbt-Projekte oder Sbt-Teilprojekte? –

+0

Projekt A und B sind dedizierte Sbt-Projekte, keine Teilprojekte/Module. – Dzhu

+1

es klingt wie die Frage ist vielleicht ein Spezialfall der Verwendung von externen Bibliothekscode in build.scala? das würde dein Ziel erreichen, oder? – Owen

Antwort

3

Ich wollte dies auch tun. Wichtig ist, dass das gemeinsame Setup in einem eigenen Projekt leben muss, von dem die Teilprojekte abhängen, so dass eine Änderung am gemeinsamen Setup automatisch in allen Teilprojekten wirksam wird. Der einzige Weg, dies zu erreichen, besteht darin, die üblichen Sachen in ein SBT-Plugin zu legen.

Ich schrieb ein solches Plugin, genannt iesl-sbt-base. Es bietet einen Stapel von Boilerplate, so dass die Build.scala-Datei für Ihr Projekt trivial sein kann. Es sieht vor:

  • Resolver-Konfiguration
  • Vereinfachte Abhängigkeitsauflösung mit automatischer Aktualisierung
  • Klarheit darüber, was transitive Abhängigkeiten
  • Optional Schutz von Snapshot-Versionen verwendet werden
  • aufgeräumte Protokollierung Konfiguration

Einzelheiten finden Sie unter https://github.com/iesl/iesl-sbt-base. Wahrscheinlich möchten Sie das auszweigen, um Dinge zu ändern, die für mein Setup spezifisch sind (z. B. speziell Resolver-URLs). Wenn Bedarf besteht, kann ich darüber nachdenken, wie ich es konfigurierbarer machen kann.

+0

Das ist super danke David! – Dzhu