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

如需更多詳細資訊,包括開發外掛程式的方法,請參閱 外掛程式。如需最佳實務,請參閱 外掛程式最佳實務