构建定义三种风格
- 多工程 .sbt 构建定义
- bare .sbt 构建定义
- scala 构建定义
什么是构建定义
sbt 在检查项目和处理构建定义文件之后,形成一个Project定义。
在build.sbt中你可以创建一个本目录的Project工程定义,像这样:lazy val root = (project in file("."))
构建定义文件不会直接影响 sbt 的 map。取而代之的是,构建定义会创建一个类型为 Setting[T] 的庞大的对象列表,T 是映射表中值(value)的类型。一个 Setting 描述的是一次 对映射表(map)的转换, 像增加一个新的键值对或者追加到一个已经存在的 value 上。(在函数式编程关于使用不可变数据结构和值的思想中,一次转换返回一个新的map —— 它不会就地更新旧的 map。)
总结:一个构建定义是一个Project,拥有一个类型为 Setting[T] 的列表,Setting[T] 是会影响到 sbt 保存键值对的 map 的一种转换,T 是每一个 value 的类型。
lazy val root = (project in file(".")). settings( name := "hello" )
如何在build.sbt中定义设置
lazy val commonSettings = Seq( organization := "com.example", version := "0.1.0", scalaVersion := "2.11.7" ) lazy val root = (project in file(".")). settings(commonSettings: _*). settings( name := "hello" )
这些表达式可以用 val,lazy val,def 声明。 build.sbt 不允许使用顶层的 object 和 class。它们必须写到 project/ 目录下作为完整的 Scala 源文件。
- Keys
- 类型
- SettingKey[T]:一个 key 对应一个只计算一次的 value(这个值在加载项目的时候计算,然后一直保存着)。
- TaskKey[T]:一个 key 对应一个称之为 task 的 value,每次都会重新计算,可能存在潜在的副作用。
- InputKey[T]:一个 key 对应一个可以接收命令行参数的 task。详细内容参见 Input Tasks。
- 内置keys
内置的 keys 实际上是对象 Keys 的字段。build.sbt 会隐式包含 import sbt.Keys._,所以可以通过 name 取到 sbt.Keys.name。 自定义Keys
可以通过它们各自的创建方法:settingKey,taskKey 和 inputKey 创建自定义 keys。每个方法都期待 key 和 value 的类型以及一段描述。 key 的名称取自于赋给 val 变量的值。例如,给一个新的 task hello 定义一个 key,lazy val hello = taskKey[Unit]("一个 task 示例")
vals 和 defs 必须以空行和设置(settings)分隔。
定义Tasks:lazy val hello = taskKey[Unit]("An example task") lazy val root = (project in file(".")). settings( hello := { println("Hello!") } )
定义setting
lazy val root = (project in file(".")). settings( name := "hello" )
- 交互模式中的keys
在 sbt 的交互模式下,你可以输入任何 task 的 name 来执行该 task。这就是为什么输入 compile 就是执行 compile task。compile 就是该 task 的 key。
输入一个 task key 的 name 会执行该 task 但是不会显示执行结果的值(value);输入 show 而不是 简单的 可以看到该 task 的执行结果。 build.sbt中的import
你可以将 import 语句放在 build.sbt 的顶部;它们可以不用空行分隔。import sbt._ import Process._ import Keys._
添加依赖库
val derby = "org.apache.derby" % "derby" % "10.4.1.3" lazy val commonSettings = Seq( organization := "com.example", version := "0.1.0", scalaVersion := "2.11.7" ) lazy val root = (project in file(".")). settings(commonSettings: _*). settings( name := "hello", libraryDependencies += derby )
% 方法是用来从字符串构造 Ivy 模块 ID 的,将在 库依赖 中介绍。
scala构建工具SBT的使用_构建定义
最新推荐文章于 2020-05-06 13:06:16 发布