2016-05-23 16 views
1

Ich habe die folgende Projektdefinition (vereinfacht):Referenz auf nicht definierte Einstellung in Plugin von Multiprojekt sbt

object B extends Build { 
    lazy val root = (project in file(".")) 
    .aggregate(commons, processor) 

    lazy val commons = (project in file("commons")) 

    lazy val processor = (project in file("processor")) 
    .enablePlugins(BuildInfoPlugin, BuildTag) 
} 

und das BuildTag Plugin (auch die Frage auf der Hand vereinfacht):

object BuildTag extends AutoPlugin { 

    override def requires = BuildInfoPlugin 

    override lazy val buildSettings = Seq(
    packageOptions in (Compile, packageBin) += { 
     Package.ManifestAttributes(("buildinfo.package", (buildInfoPackage in Compile).value)) 
    } 
) 
} 

wenn ich das Projekt zu laden, erhalte ich einen Fehler wie:

Reference to undefined setting: 

    {.}/compile:buildInfoPackage from {.}/compile:packageBin::packageOptions 

Es ist wie sbt sieht tryin g, um die Einstellung außerhalb des Bereichs zu referenzieren, in dem das Plugin sie verwendet. Warum könnte das sein und wie kann ich das beheben?

Antwort

1

Das Problem hier war nicht die Multi-Modul-Natur, weil es auch in einem Einzel-Modul-Projekt reproduzierbar ist.

jedoch statt

override lazy val buildSettings = ... 

müssen Sie projectSettings verwenden die buildInfoPackage Aufgabe nutzbar zu machen.