2014-05-06 47 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-插件設置添加宏天堂插件作爲編譯器依賴項,宏實現作爲庫依賴項。