2016-07-19 7 views
10

Die Antwort unter https://stackoverflow.com/a/21605652/1737727 zeigt, wie eine Einstellung für ein mit dem Projekt RootProject definiertes Unterprojekt überschrieben wird. Ich habe mich gefragt, ob es eine gute Möglichkeit gibt, dies für mehrere Einstellungen zu tun, und möglicherweise auch für mehrere Unterprojekte, so dass Sie nicht jede Kombination einzeln auflisten müssen. Dies würde die Verbreitung verhindern und die Wahrscheinlichkeit verringern, dass eine Kombination vergessen wird und versehentlich Einstellungen fehlen.Verwenden Sie allgemeine Einstellungen in SBT `RootProject`

Wenn nicht RootProject verwenden, zeigen die SBT docs, wie diese Einstellungen mit einer gemeinsamen Sequenz zu tun:

lazy val commonSettings = Seq(
    organization := "com.example", 
    version := "0.1.0", 
    scalaVersion := "2.11.8" 
) 

lazy val core = (project in file("core")). 
    settings(commonSettings: _*). 
    settings(
    // other settings 
) 

lazy val util = (project in file("util")). 
    settings(commonSettings: _*). 
    settings(
    // other settings 
) 

Aber ein RootProject hat keine Methode seine Einstellungen zu setzen. Ich habe versucht, etwas wie folgt, nach der oben genannten Antwort:

lazy val util = RootProject(file("../util")) 
commonSettings.map(_.key).foreach(key => key in util := key.value) 

aber das scheint nicht der richtige Ansatz zu sein.

Ich habe in mit Global oder ThisBuild Umfang gesucht, aber jedes Teilprojekt setzt die Einstellungen in eigener build.sbt-Datei, den Vorrang vor diesen breiteren Bereichen nimmt, wenn ich das richtig verstehen.

Gibt es eine gute Möglichkeit dies zu tun, oder sollte ich einfach jede Einstellung für jedes Teilprojekt manuell vornehmen? Sollte ich verschiedene Bereiche verwenden, z. die Teilprojekte definieren ihre Einstellungen in Global und das Hauptprojekt in ThisBuild?

Antwort

0

Nun, Sie könnte dies tun:

commonSettings.map { s => s.mapKey(Def.mapScope(_.in(util))) } 

Diese neue Seq[Setting[_]] erstellt, wobei jeder der Bereiche der Einstellung geändert wird im util Projekt. Dies ist ein gültiger Eintrag in einer sbt-Datei.

Eine weitere Option ist die Definition eines SBT-Plugin, das Sie sowohl Ihre wichtigsten Projekte hinzufügen und in RootProject eigenen build.sbt

Aber Sie möchten vielleicht prüfen, ob Sie tatsächlich das util Projekt als RootProject statt importieren müssen von ein regelmäßiges Teilprojekt.

+2

Das funktioniert tatsächlich, vielen Dank! Ich benutze 'RootProject', weil das Unterprojekt sich in einem Geschwisterverzeichnis des Hauptprojekts befindet (es wird von mehreren Projekten geteilt) und Sie können nicht 'Projekt in Datei (" ../ util ")' machen. Es wäre großartig, etwas über einen besseren Weg zu lernen, wenn auch vielleicht nicht ganz zum Thema für diese Frage. – sgvd

+0

Wenn 'util' kein eigenes Build benötigt, können Sie direkt zu' unmanagedSourceDirectories' hinzufügen. –

Verwandte Themen