我有一个使用宏天堂插件的库(称为宏提供程序库)。在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
无法解决问题。
答案 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设置将宏天堂插件添加为编译器依赖项,将宏实现添加为库依赖项。