2014-05-06 50 views
14

我有一个使用宏天堂插件(称为宏提供程序库)的库。在build.sbtSBT编译器插件作为传递依赖项

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

,以获得对宏注释

将宏库作为libraryDependency添加到单独的项目(称为宏消费者项目)时,注释存在,但宏实现从不调用。将宏天堂编译器插件添加到宏用户项目libraryDependencies可解决此问题。

是否有可能包含编译器插件作为传递依赖?这将使宏库的消费者免于添加所需的插件。


更新#1:

addCompilerPlugin帮助增加依赖于libraryDependencies,并设置与宏提供商库内configuration = Some("plugin->default(compile)")的依赖。

添加在宏观提供商库的libraryDependenciesparadise依赖导致神器在宏观消费项目展现出来。它不会将依赖项添加为编译器插件。

更新#2:

设置在宏观消费项目autoCompilerPlugins := true结合更新#1不能解决问题。

回答

1

我发现解决此问题的唯一方法是添加sbt-plugin子模块,其中包含所需的设置。这个插件是非常基本的,

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

这可以通过在您project/plugins.sbt使用,

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

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

build.sbt文件,

fixmeSettings 

的SBT-插件设置添加宏天堂插件作为编译器依赖项,宏实现作为库依赖项。