SBT 自定义配置和任务

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

定义一个配置

在配置文件 .sbt这章已经将了如何定义个配置,大部分配置定义在Default中

配置有三种类型,其中SettingKey和TaskKey已经在配置文件 .sbt介绍了,InputKey在任务配置的输入章节介绍。

对于配置的一些例子:

val scalaVersion = settingKey[String]("The version of Scala used for building.")
val clean = taskKey[Unit]("Deletes files produced by the build, such as generated sources, compiled classes, and task caches.")

创建配置的构造方法有两个参数,分别是配置的名称("scalaVersion")和一个描述该配置的字符串("The version of scala used for building.")。

在配置文件 .sbt中介绍在SettingKey[T]中的T表示该配置值得类型,在TaskKey[T]中T代表该任务返回的类型。并且也介绍了一个参数配置是一个常量,其在项目加载的时候就初始化好了,而一个任务配置是可以重复执行的(任何时候在交互模式下或批量脚本中都可以调用执行)

所有的配置都定义在 .sbt, .scala文件或插件中,任何的在.scala配置文件中或在插件中的配置都将自动的合并到 .sbt 文件中。

实现一个任务

当定义完一个任务配置后,需要实现一个任务配置。可以自己实现一个任务,也可以重载一个已经存在的任务,两者配置的方式没有任何区别。通过:=方法来关联任务配置来实现一个任务,例如:

val sampleStringTask = taskKey[String]("A sample string task.")

val sampleIntTask = taskKey[Int]("A sample int task.")

sampleStringTask := System.getProperty("user.home")

sampleIntTask := {
  val sum = 1 + 2
  println("sum: " + sum)
  sum
}

如果一个任务有依赖关系,可以直接引用依赖的配置,在配置参数的方法 一章已经介绍了。

实现任务最难的部分是用Scala代码实现该任务具体执行过程,例如,可以编写一个格式化HTML的任务用相关的HTML lib 库(自己可以定义添加一个依赖库,在该基础上编写)

sbt 也提供了一些工具库,例如常用的文件和目录操作API等。

利用插件

如果有许多通用的代码,可以将其提取到一个插件中,可以实现多项目的复用。

更新于 2016-09-04
在线,4小时前登录

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