插件可以擴展工程構(gòu)建定義,通常是增加一些新的配置,配置可以是任務(wù)配置,例如,一個插件可以增加一個codeCoverage 的任務(wù)配置,用來生成項目單元測試的代碼覆蓋率報告。
如果一個項目的目錄為hello, 并且在該項目中使用sbt-site這個插件,只需創(chuàng)建一個名為hello/project/site.sbt配置文件,并且通過addSbtPlugin方法申明該插件的Ivy模塊ID:
addSbtPlugin("com.typesafe.sbt" % "sbt-site" % "0.7.0")
如果添加一個sbt-assembly的插件,創(chuàng)建一個hello/project/assembly.sbt 配置文件,并且配置如下:
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.11.2")
并不是每個插件在默認的遠程庫中都存在,這個需要根據(jù)具體的插件文檔來配置遠程庫地址:
resolvers += Resolver.sonatypeRepo("public")
插件一般都會提供一些配置來添加啟用插件,下一小節(jié)討論這個問題。
一個插件通過配置可以自動的添加到項目中,不需要額外的做任何工作,在0.13.5有一個新的特性是可以自動啟用和配置在一個項目中,大部分自動插件都已經(jīng)自動的進行了默認的配置,不過有個別的插件也需要明確啟用。
如果一個插件需要配置啟用才可以使用,需要在build.sbt中進行如下配置:
lazy val util = (project in file("util")).
enablePlugins(FooPlugin, BarPlugin).
settings(
name := "hello-util"
)
enablePlugins 方法用來指定需要啟用的配置。
一個項目也可以通過disablePlugins 來排除使用一個插件。例如,在util項目中不想用插件IvyPlugin,可以如下配置:
lazy val util = (project in file("util")).
enablePlugins(FooPlugin, BarPlugin).
disablePlugins(plugins.IvyPlugin).
settings(
name := "hello-util"
)
自動插件應(yīng)該在文檔中明確指定該插件是否需要顯式的啟用, 如果疑惑一個插件是否已經(jīng)啟用,可以在交互模式下使用命令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
這塊顯示的是所有默認開啟的插件,sbt 默認啟用三個插件:
另外 JUnitXmlReportPlugin插件只要是提供生成 junit-xml 文件的支持
添加老版非自動插件經(jīng)常需要顯式的配置,插件文檔將會指出如何進行配置,典型的老版插件是由基礎(chǔ)配置和自定義配置構(gòu)成。
例如,對于 sbt-site 這個插件,用如下配置來啟用該插件:
site.settings
如果是多項目構(gòu)建,可以直接在項目配置中配置:
// 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 : _*)
插件可以通過在~/.sbt/0.13/plugins/ 下一次申明配置應(yīng)用在多個項目中,~/.sbt/0.13/plugins/ 是一個sbt項目,其classpath將導(dǎo)出到每個sbt構(gòu)建項目中,粗略的講,在~/.sbt/0.13/plugins/中的任何.sbt或.scala配置都會影響到所有的sbt構(gòu)建項目
可以在~/.sbt/0.13/plugins/build.sbt 通過addSbtPlugin方法添加一個插件來應(yīng)用到所有的項目中,所以如果添加一些針對機器的環(huán)境變量等的場合這個特性非常實用。
已經(jīng)存在的插件列表
一般比較常用的有兩類: