2014-05-06 9 views
14

Ich habe eine Bibliothek, die das Macro Paradise-Plugin verwendet (als Macro-Provider-Bibliothek bezeichnet). Im build.sbt,SBT-Compiler-Plugin als transitive Abhängigkeit

addCompilerPlugin("org.scalamacros" % "paradise" % "2.0.0" cross CrossVersion.full) 

Zugang zu den Makro Anmerkungen zu gewinnen.

Beim Hinzufügen der Makrobibliothek als libraryDependency zu einem separaten Projekt (als Macro-Consumer-Projekt bezeichnet) sind die Anmerkungen vorhanden, aber die Makroimplementierung wird nie aufgerufen. Durch das Hinzufügen des Makro-Paradies-Compiler-Plugins zum Makro-Consumer-Projekt libraryDependencies wird das Problem gelöst.

Ist es möglich, Compiler-Plugins als transitive Abhängigkeiten einzuschließen? Dies würde die Verbraucher der Makrobibliothek davon abhalten, das erforderliche Plugin hinzuzufügen.


Update # 1:

Der addCompilerPlugin Helfer fügt die Abhängigkeit der libraryDependencies und setzt die Abhängigkeit mit einem configuration = Some("plugin->default(compile)") innerhalb der Makro-Anbieter Bibliothek.

die paradise Abhängigkeit in den libraryDependencies der Makro Anbieter Bibliothek Hinzufügen bewirkt, dass das Artefakt in dem Makro-Consumer-Projekt zu zeigen. Es fügt die Abhängigkeit nicht als Compiler-Plugin hinzu.

Update # 2:

Einstellung autoCompilerPlugins := true im Makro-Consumer-Projekt in Verbindung mit Update # 1 das Problem nicht lösen.

Antwort

1

Die einzige Möglichkeit, dieses Problem zu beheben, war das Hinzufügen eines sbt-plugin Untermoduls, das die erforderlichen Einstellungen enthält. Das Plugin ist sehr einfach,

package fixme 

import sbt._ 
import Keys._ 

object Plugin extends sbt.Plugin { 
    val paradiseVersion = "2.0.0" 
    val fixmeVersion = "1.4" 
    val fixmeSettings: Seq[Setting[_]] = Seq(
    resolvers += "tysonjh releases" at "http://tysonjh.github.io/releases/", 
    libraryDependencies <++= (scalaVersion) { v: String ⇒ 
     (if (v.startsWith("2.10")) List("org.scalamacros" %% "quasiquotes" % paradiseVersion % "compile") 
     else Nil) :+ 
     "org.scala-lang" % "scala-reflect" % v % "compile" :+ 
     "com.tysonjh" %% "fixme" % fixmeVersion % "compile" 
    }, 
    addCompilerPlugin("org.scalamacros" % "paradise" % paradiseVersion cross CrossVersion.full)) 
} 

Dies kann

fixmeSettings 

Die sbt-Plugin-Einstellungen fügen Sie das Makro

resolvers += "tysonjh releases" at "http://tysonjh.github.io/releases/" 

addSbtPlugin("com.tysonjh" % "sbt-fixme" % "1.4") 

und die build.sbt Datei, indem in Ihrem project/plugins.sbt, verwendet werden, Paradise-Plugin als Compiler-Abhängigkeit und die Makro-Implementierung als Bibliotheksabhängigkeit.

Verwandte Themen