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

时间:2017-05-03 10:22:33

标签: scala sbt scala-macros sbt-plugin scala-macro-paradise

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:5)

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

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

希望这会有所帮助,例如真正受欢迎的Monocle lib here。例如,如果没有天堂,注释就不会扩展,所以这都是最终用户需要的问题。

<强>引用

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

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