SBT 插件:如何将编译器插件添加为不向下游传播的依赖项?
SBT Plugin: How to add compiler plugin as a dependency that is not propagated downstream?
我正在写一个 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 编译器插件是否传播到下游项目?
编译器插件默认不传播,但下游用户实际上需要它们作为依赖项,您无法绕过此要求。
原因很简单,他们的代码将在不同的编译单元中编译,所以只要你有依赖于最终代码库中的编译器插件的功能,你也需要坚持关于此插件的注释以明确添加依赖项。
希望这对您有所帮助,并以真正流行的 Monocle lib here 为例。例如,注释不会在没有天堂的情况下扩展,所以这完全是最终用户需要什么的问题。
引用
如果要使用@Lenses等宏注解,还需要包含:
addCompilerPlugin("org.scalamacros" %% "paradise" % "2.1.0" cross CrossVersion.full)
我正在写一个 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 编译器插件是否传播到下游项目?
编译器插件默认不传播,但下游用户实际上需要它们作为依赖项,您无法绕过此要求。
原因很简单,他们的代码将在不同的编译单元中编译,所以只要你有依赖于最终代码库中的编译器插件的功能,你也需要坚持关于此插件的注释以明确添加依赖项。
希望这对您有所帮助,并以真正流行的 Monocle lib here 为例。例如,注释不会在没有天堂的情况下扩展,所以这完全是最终用户需要什么的问题。
引用
如果要使用@Lenses等宏注解,还需要包含:
addCompilerPlugin("org.scalamacros" %% "paradise" % "2.1.0" cross CrossVersion.full)