SBT编译器插件作为传递依赖

时间:2014-05-06 03:19:17

标签: scala macros sbt

我有一个使用宏天堂插件的库(称为宏提供程序库)。在build.sbt

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

可以访问宏注释

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

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


更新#1:

addCompilerPlugin帮助器将依赖项添加到libraryDependencies,并在宏提供程序库中使用configuration = Some("plugin->default(compile)")设置依赖项。

在宏提供程序库的paradise中添加libraryDependencies依赖项会导致工件显示在宏消费者项目中。它不会将依赖项添加为编译器插件。

更新#2:

在宏观消费者项目中与更新#1 一起设置autoCompilerPlugins := true无法解决问题。

1 个答案:

答案 0 :(得分: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-plugin设置将宏天堂插件添加为编译器依赖项,将宏实现添加为库依赖项。