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

SBT Plugin: Propagate Compiler Plugin and Enable Plugin downstream

我看到了 但这并没有回答我的问题。

结构如下:

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

由于other pluginsconsumer project需要在自己的build.sbt中添加addCompilerPluginenablePlugins

我在 my own pluginbuild.sbt 中添加了 other plugins

我应该把 addCompilerPluginenablePlugins 放在我的插件的什么地方,这样 consumer project 就不必自己做?

谢谢

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[_]将自动应用到该项目中,并使用指定的编译器插件来构建您的代码。