在另一个SBT插件中明确启用SBT插件

Lyk*_*hia 7 scala sbt

我正在编写一个sbt插件来抽象出一些涉及我使用的常见插件的样板.在这一过程中,该插件之一的我试图配置有它requires设置为noTrigger这需要显式启用在项目设置的插件.

随着SBT AutoPlugin如果我设置的requires = BuildInfoPlugin,并trigger = allRequirements再设置将自动加载,如果我明确地,令基地插件,或者如果我需要设置如上,并trigger = noTrigger随后加入明确我的工作将导入基础插件以及插件.

/* Requires enablePlugins(BuildInfoPlugin) to be explicitly set on project,
   then the settings in this plugin will automatically load. */
object BuildInformation extends AutoPlugin {

  override def requires = BuildInfoPlugin
  override def trigger = allRequirements
}
Run Code Online (Sandbox Code Playgroud)

.

/* Requires enablePlugins(BuildInformation) to be explicitly set on project,
   which will automatically import BuildInfoPlugin */
object BuildInformation extends AutoPlugin {

  override def requires = BuildInfoPlugin
}
Run Code Online (Sandbox Code Playgroud)

有没有办法让衍生插件显式导入基本插件,而不需要明确添加派生插件本身?(例如PlayFramework的PlayScala插件会在sbt-native-packager中加载它,但是需要显式启用PlayScala)

我想到的一件事就是扩展基本插件,并覆盖它的触发器方法allRequirements,但是想知道是否有更清洁/更首选的方法.

Jus*_*ser 0

并不比派生更优雅,但可能更灵活:

object DerivedPlugin extends AutoPlugin {

  override def trigger: PluginTrigger = allRequirements
  override def requires = JvmPlugin

  val autoImport = BasePlugin.autoImport

  override lazy val projectSettings = BasePlugin.projectSettings

}
Run Code Online (Sandbox Code Playgroud)