SBT插件:如何添加编译器插件作为未传播到下游的依赖项?

mir*_*val 5 scala sbt scala-macros scala-macro-paradise sbt-plugin

我正在写一个SBT插件.我想使用Circe JSON库,但它需要Scala 2.10上的Macro Paradise编译器插件.

通常,您将编译器插件添加到build.sbtSBT插件project/plugins.sbt.

现在,当您构建SBT插件时,其他插件将成为依赖项,因此您将它们放入并将build.sbt它们传播到您使用SBT插件的项目.

当我将以下片段放入build.sbt我的SBT插件时:

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

Paradise编译器插件是否会传播到下游项目?

fla*_*ian 5

默认情况下,编译器插件不会传播,但实际上下游用户需要它们作为依赖项,并且您无法绕过此要求.

原因很简单,它们的代码将在不同的编译单元中编译,因此只要您具有依赖于将在最终代码库中找到的编译器插件的功能,您还需要在此插件上添加注释显式添加依赖项.

希望这会有所帮助,例如在这里真正流行的Monocle lib .例如,没有天堂,注释就不会扩展,所以这都是最终用户需要的问题.

引用

如果要使用@Lenses等宏注释,还需要包括:

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