scala构建工具SBT的使用_构建定义

  1. 构建定义三种风格

    • 多工程 .sbt 构建定义
    • bare .sbt 构建定义
    • scala 构建定义
  2. 什么是构建定义
    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"
      )
    
  3. 如何在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 源文件。

    1. Keys
    2. 类型
      • SettingKey[T]:一个 key 对应一个只计算一次的 value(这个值在加载项目的时候计算,然后一直保存着)。
      • TaskKey[T]:一个 key 对应一个称之为 task 的 value,每次都会重新计算,可能存在潜在的副作用。
      • InputKey[T]:一个 key 对应一个可以接收命令行参数的 task。详细内容参见 Input Tasks。
    3. 内置keys
      内置的 keys 实际上是对象 Keys 的字段。build.sbt 会隐式包含 import sbt.Keys._,所以可以通过 name 取到 sbt.Keys.name。
    4. 自定义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"
          )
      
    5. 交互模式中的keys
      在 sbt 的交互模式下,你可以输入任何 task 的 name 来执行该 task。这就是为什么输入 compile 就是执行 compile task。compile 就是该 task 的 key。
      输入一个 task key 的 name 会执行该 task 但是不会显示执行结果的值(value);输入 show 而不是 简单的 可以看到该 task 的执行结果。
    6. build.sbt中的import
      你可以将 import 语句放在 build.sbt 的顶部;它们可以不用空行分隔。

        import sbt._
        import Process._
        import Keys._
      
    7. 添加依赖库

        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 的,将在 库依赖 中介绍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值