SBT插件:向下游传播编译器插件并启用插件

时间:2018-12-17 20:48:57

标签: scala sbt sbt-plugin

我看到了SBT Plugin: How to add compiler plugin as a dependency that is not propagated downstream?,但这不能回答我的问题。

这里是结构:

other plugins
    |-----> added to my own plugin
                |-----> Consumer project

由于consumer projectaddCompilerPlugin需要在自己的enablePlugins中添加build.sbtother plugins

我在other plugins的{​​{1}}中添加了build.sbt

我在插件中将my own pluginaddCompilerPlugin放在哪里,这样enablePlugins不必自己做?

谢谢

1 个答案:

答案 0 :(得分:1)

addCompilerPlugin只是用于修改特定设置键的快捷方式,而enablePlugins是用于修改项目配置本身的方法。因此,这些东西在不同的级别上,因此针对您的目的进行不同的处理。

为确保启用插件也将启用其他插件,您需要修改插件中的requires声明:

object YourPlugin extends AutoPlugin {
  override def requires: Plugins = FirstDependencyPlugin & SecondDependencyPlugin
}

现在,当您将插件添加到项目中时:

lazy val someProject = project.enablePlugins(YourPlugin)

然后还将启用FirstDependencyPluginSecondDependencyPlugin插件。

要启用编译器插件,只需确保您的插件提供addCompilerPlugin返回的设置定义:

object YourPlugin extends AutoPlugin {
  override def projectSettings: Seq[Def.Setting[_]] = super.projectSettings ++ Vector(
    addCompilerPlugin("com.example" % "some-plugin" % "1.2.3")
  )
}

现在,将您的插件添加到项目中后,它提供的Def.Setting[_]将自动应用于该项目,并且它将使用指定的编译器插件来构建您的代码。