SBT 插件使用

半兽人 发表于: 2016-09-04   最后更新时间: 2016-09-04 00:13:13  
{{totalSubscript}} 订阅, 4,610 游览

什么是插件?

插件可以扩展工程构建定义,通常是增加一些新的配置,配置可以是任务配置,例如,一个插件可以增加一个codeCoverage 的任务配置,用来生成项目单元测试的代码覆盖率报告。

使用插件

如果一个项目的目录为hello, 并且在该项目中使用sbt-site这个插件,只需创建一个名为hello/project/site.sbt配置文件,并且通过addSbtPlugin方法申明该插件的Ivy模块ID:

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.sonatypeRepo("public")

插件一般都会提供一些配置来添加启用插件,下一小节讨论这个问题。

插件的启用

一个插件通过配置可以自动的添加到项目中,不需要额外的做任何工作,在0.13.5有一个新的特性是可以自动启用和配置在一个项目中,大部分自动插件都已经自动的进行了默认的配置,不过有个别的插件也需要明确启用。

如果一个插件需要配置启用才可以使用,需要在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"
  )

自动插件应该在文档中明确指定该插件是否需要显式的启用, 如果疑惑一个插件是否已经启用,可以在交互模式下使用命令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 默认启用三个插件:

  • CorePlugin: 提供并行任务的控制
  • IvyPlugin: 提供依赖模块的发布、解析机制
  • JvmPlugin: 提供编译、测试、打包 Scala/Java代码机制

另外 JUnitXmlReportPlugin插件只要是提供生成 junit-xml 文件的支持

添加老版非自动插件经常需要显式的配置,插件文档将会指出如何进行配置,典型的老版插件是由基础配置和自定义配置构成。

例如,对于 sbt-site 这个插件,用如下配置来启用该插件:

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 : _*)

全局插件

插件可以通过在~/.sbt/0.13/plugins/ 下一次申明配置应用在多个项目中,~/.sbt/0.13/plugins/ 是一个sbt项目,其classpath将导出到每个sbt构建项目中,粗略的讲,在~/.sbt/0.13/plugins/中的任何.sbt或.scala配置都会影响到所有的sbt构建项目 可以在~/.sbt/0.13/plugins/build.sbt 通过addSbtPlugin方法添加一个插件来应用到所有的项目中,所以如果添加一些针对机器的环境变量等的场合这个特性非常实用。

已经存在的插件

已经存在的插件列表

一般比较常用的有两类:

  • 针对某些IDE的插件
  • 针对Web框架支持的插件,如xsbt-web-plugin
更新于 2016-09-04

查看sbt更多相关的文章或提一个关于sbt的问题,也可以与我们一起分享文章