2014-05-06 6 views
14

Possiedo una libreria che utilizza il plug-in macro paradise (denominato libreria macrocomputer). Nel build.sbt,Plugin del compilatore SBT come dipendenza transitoria

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

per ottenere l'accesso alle annotazioni macro.

Quando si aggiunge la libreria macro come libraryDependency a un progetto separato (denominato progetto macro-consumatore), le annotazioni sono presenti, ma l'implementazione della macro non viene mai chiamata. L'aggiunta del plug-in del compilatore di macro-paradiso al progetto macro-consumatore libraryDependencies risolve il problema.

È possibile includere plug-in del compilatore come dipendenze transitive? Ciò libererebbe gli utenti della libreria macro dall'aggiunta del plugin richiesto.


Update # 1:

Il addCompilerPlugin aiutante aggiunge la dipendenza al libraryDependencies e imposta la dipendenza con un configuration = Some("plugin->default(compile)") all'interno della libreria di macro-fornitore.

Aggiungendo il paradise dipendenza nel libraryDependencies della biblioteca macro-fornitore fa sì che il manufatto di presentarsi nel progetto macro-consumo. Non aggiunge la dipendenza come plugin del compilatore.

Aggiornamento # 2:

Impostazione autoCompilerPlugins := true nel progetto macro-consumatori in collaborazione con Update # 1 non risolve il problema.

risposta

1

L'unico modo per risolvere questo problema è stato l'aggiunta di un sottomodulo sbt-plugin che include le impostazioni richieste. Il plugin è molto semplice,

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

questo può essere utilizzato includendo nella vostra project/plugins.sbt,

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

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

e il file build.sbt,

fixmeSettings 

Le impostazioni SBT-plug aggiungere la macro plugin paradise come dipendenza del compilatore e implementazione della macro come dipendenza dalla libreria.