插件基础

什么是插件?

插件扩展构建定义,最常见的方式是添加新的设置和任务。例如,插件可以添加 githubWorkflowGenerate 任务来生成 GitHub Actions YAML。

使用 Scaladex 查找插件版本

您可以使用 Scaladex 搜索插件,并查找插件的最新版本。

声明插件

如果您的项目在目录 hello 中,且您要向构建定义添加 sbt-github-actions,请创建 hello/project/plugins.sbt,并通过将插件的模块 ID 传递给 addSbtPlugin(...) 来声明插件依赖:

// In project/plugins.sbt

addSbtPlugin("com.github.sbt" % "sbt-github-actions" % "0.28.0")

如果您要添加 sbt-assembly,请添加以下内容:

// In project/plugins.sbt

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "2.3.1")

有关使用托管在 git 仓库中的插件的实验性技术,请参阅 Source dependency plugin 配方。

插件通常提供设置和任务,这些设置和任务会添加到子项目中以启用插件的功能。下一节将对此进行说明。

启用和禁用自动插件

插件可以声明其设置自动添加到构建定义中,在这种情况下您无需做任何操作即可添加它们。

自动插件功能使插件能够自动且安全地确保其设置和依赖位于项目上。许多自动插件应自动具有其默认设置。

如果您使用的自动插件需要显式启用,则必须在您的 build.sbt 中添加以下内容:

lazy val util = (project in file("util"))
  .enablePlugins(FooPlugin, BarPlugin)
  .settings(
    name := "hello-util"
  )

enablePlugins 方法允许项目显式定义它们希望使用的自动插件。

项目还可以使用 disablePlugins 方法排除插件。例如,如果我们希望从 util 中移除 IvyPlugin 设置,可以按如下方式修改 build.sbt

lazy val util = (project in file("util"))
  .enablePlugins(FooPlugin, BarPlugin)
  .disablePlugins(plugins.IvyPlugin)
  .settings(
    name := "hello-util"
  )

自动插件应记录它们是否需要显式启用。如果您想了解给定项目启用了哪些自动插件,只需在 sbt 控制台中运行 plugins 命令。

sbt:hello> plugins
In build /tmp/hello/:
  Enabled plugins in hello:
    sbt.plugins.CorePlugin
    sbt.plugins.DependencyTreePlugin
    sbt.plugins.Giter8TemplatePlugin
    sbt.plugins.IvyPlugin
    sbt.plugins.JUnitXmlReportPlugin
    sbt.plugins.JvmPlugin
    sbt.plugins.SemanticdbPlugin
Plugins that are loaded to the build but not enabled in any subprojects:
  sbt.ScriptedPlugin
  sbt.plugins.SbtPlugin

此处,plugins 输出显示 sbt 的默认插件均已启用。sbt 的默认设置由 7 个插件提供:

  1. CorePlugin:提供任务的核心并行控制。
  2. DependencyTreePlugin:提供依赖树任务。
  3. Giter8TemplatePlugin:提供 sbt new 支持。
  4. IvyPlugin:提供发布/解析模块的机制。
  5. JUnitXmlReportPlugin:提供生成 junit-xml 的支持。
  6. JvmPlugin:提供编译/测试/运行/打包 Java/Scala 项目的机制。
  7. SemanticdbPlugin:提供生成 SemanticDB 的支持。

可用插件

除了 Scaladex 之外,还有可用插件列表