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

tys*_*njh 14 macros scala sbt

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

addCompilerPlugin("org.scalamacros" % "paradise" % "2.0.0" cross CrossVersion.full)
Run Code Online (Sandbox Code Playgroud)

获取对宏注释的访问权限.

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

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


更新#1:

addCompilerPlugin助手添加依赖于libraryDependencies和设置与依赖configuration = Some("plugin->default(compile)")宏观供应商库中.

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

更新#2:

autoCompilerPlugins := true消息更新#1一起在宏消费者项目中进行设置无法解决问题.

tys*_*njh 1

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

\n\n
package fixme\n\nimport sbt._\nimport Keys._\n\nobject Plugin extends sbt.Plugin {\n  val paradiseVersion = "2.0.0"\n  val fixmeVersion = "1.4"\n  val fixmeSettings: Seq[Setting[_]] = Seq(\n    resolvers += "tysonjh releases" at "http://tysonjh.github.io/releases/",\n    libraryDependencies <++= (scalaVersion) { v: String \xe2\x87\x92\n      (if (v.startsWith("2.10")) List("org.scalamacros" %% "quasiquotes" % paradiseVersion % "compile")\n      else Nil) :+\n        "org.scala-lang" % "scala-reflect" % v % "compile" :+\n        "com.tysonjh" %% "fixme" % fixmeVersion % "compile"\n    },\n    addCompilerPlugin("org.scalamacros" % "paradise" % paradiseVersion cross CrossVersion.full))\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

这可以通过包含在您的project/plugins.sbt,

\n\n
resolvers += "tysonjh releases" at "http://tysonjh.github.io/releases/"\n\naddSbtPlugin("com.tysonjh" % "sbt-fixme" % "1.4")\n
Run Code Online (Sandbox Code Playgroud)\n\n

build.sbt文件,

\n\n
fixmeSettings\n
Run Code Online (Sandbox Code Playgroud)\n\n

sbt-plugin 设置将宏天堂插件添加为编译器依赖项,并将宏实现添加为库依赖项。

\n