1. 使用插件

使用插件 

请先阅读入门指南中的早期页面,特别是您需要理解 build.sbt任务图库依赖,然后再阅读此页面。

什么是插件? 

插件扩展了构建定义,最常见的是添加新的设置。新的设置可能是新的任务。例如,插件可以添加一个 codeCoverage 任务,该任务会生成测试覆盖率报告。

声明插件 

如果您的项目在目录 hello 中,并且您正在将 sbt-site 插件添加到构建定义中,请创建 hello/project/site.sbt 并通过将插件的 Ivy 模块 ID 传递给 addSbtPlugin 来声明插件依赖项

addSbtPlugin("com.typesafe.sbt" % "sbt-site" % "0.7.0")

如果您正在添加 sbt-assembly,请创建 hello/project/assembly.sbt,内容如下

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

并非所有插件都位于默认仓库之一,插件的文档可能会指导您也添加可以找到它的仓库

resolvers ++= Resolver.sonatypeOssRepos("public")

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

启用和禁用自动插件 

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

从 sbt 0.13.5 开始,有一个新的 自动插件 功能,它使插件能够自动且安全地确保其设置和依赖项位于项目中。许多自动插件应该具有其默认设置,但有些可能需要显式启用。

如果您正在使用需要显式启用的自动插件,那么您需要将以下内容添加到您的 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 命令即可。

例如

> plugins
In file:/home/jsuereth/projects/sbt/test-ivy-issues/
        sbt.plugins.IvyPlugin: enabled in scala-sbt-org
        sbt.plugins.JvmPlugin: enabled in scala-sbt-org
        sbt.plugins.CorePlugin: enabled in scala-sbt-org
        sbt.plugins.JUnitXmlReportPlugin: enabled in scala-sbt-org

这里,plugins 输出显示 sbt 默认插件已全部启用。sbt 的默认设置通过三个插件提供

  1. CorePlugin:为任务提供核心并行控制。
  2. IvyPlugin:提供发布/解析模块的机制。
  3. JvmPlugin:提供编译/测试/运行/打包 Java/Scala 项目的机制。

此外,JUnitXmlReportPlugin 提供了对生成 junit-xml 的实验性支持。

较旧的非自动插件通常需要显式添加设置,以便 多项目构建 可以具有不同类型的项目。插件文档将说明如何配置它,但通常对于较旧的插件,这涉及添加插件的基本设置并根据需要进行自定义。

例如,对于 sbt-site 插件,请创建 site.sbt,内容如下

site.settings

以启用该项目。

如果构建定义了多个项目,请直接将其添加到项目中

// don't use the site plugin for the `util` project
lazy val util = (project in file("util"))

// enable the site plugin for the `core` project
lazy val core = (project in file("core"))
  .settings(site.settings)

全局插件 

通过在 $HOME/.sbt/1.0/plugins/ 中声明插件,可以一次为所有项目安装它们。$HOME/.sbt/1.0/plugins/ 是一个 sbt 项目,其类路径导出到所有 sbt 构建定义项目。粗略地说,$HOME/.sbt/1.0/plugins/ 中的任何 .sbt.scala 文件的行为就像它们在所有项目的 project/ 目录中一样。

您可以创建 $HOME/.sbt/1.0/plugins/build.sbt 并将 addSbtPlugin() 表达式放在其中,以将插件一次添加到所有项目中。由于这样做会增加对机器环境的依赖,因此此功能应谨慎使用。请参阅 最佳实践

可用插件 

有一个 可用插件列表

一些特别受欢迎的插件是

  • 用于 IDE 的插件(将 sbt 项目导入您的 IDE)
  • 支持 Web 框架的插件,例如 xsbt-web-plugin

有关更多详细信息,包括开发插件的方法,请参阅 插件。有关最佳实践,请参阅 插件最佳实践