2014-05-06 9 views
14

Mam bibliotekę, która korzysta z wtyczki makro raju (określanej jako biblioteka makra-dostawcy). W build.sbt,Wtyczka kompilatora SBT jako zależność przejściowa

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

aby uzyskać dostęp do adnotacji makro.

Po dodaniu biblioteki makr jako libraryDependency do osobnego projektu (zwanego projektem makrokonsumenta), adnotacje są obecne, ale implementacja makr nigdy nie jest wywoływana. Dodanie wtyczki Macro Paradise Compiler do projektu makro-konsumenta libraryDependencies rozwiązuje problem.

Czy możliwe jest dołączanie wtyczek do kompilatora jako przechodniów zależności? Dzięki temu konsumenci biblioteki makr nie będą mogli dodawać wymaganej wtyczki.


Aktualizacja # 1:

addCompilerPlugin pomocnik dodaje zależność do libraryDependencies i ustawia zależność z configuration = Some("plugin->default(compile)") w bibliotece makro-operatora.

Dodawanie zależność w libraryDependencies biblioteki makro-provider paradise powoduje artefakt, aby pokazać się w projekcie makro-konsumentów. Nie dodaje zależności jako wtyczki kompilatora.

Aktualizacja # 2:

Ustawianie autoCompilerPlugins := true w projekcie makro-konsumentów w połączeniu z Aktualizacja # 1 nie rozwiąże problemu.

Odpowiedz

1

Jedynym sposobem rozwiązania tego problemu było dodanie podmodułu sbt-plugin zawierającego wymagane ustawienia. Wtyczka jest bardzo prosty,

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)) 
} 

ten może być stosowany przez włączenie w swojej project/plugins.sbt,

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

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

a plik build.sbt,

fixmeSettings 

Ustawienia SBT-plugin dodać makro rajska wtyczka jako zależność od kompilatora i implementacja makra jako zależność od biblioteki.