`
beike
  • 浏览: 362753 次
社区版块
存档分类
最新评论

sbt从入门到半熟

阅读更多

zt http://www.kaopua.com/blog/2012/02/03/1328280189872.html

 

SBT = (not so) Simple Build Tool,是scala的构建工具,与java的maven地位相同。其设计宗旨是让简单的项目可以简单的配置,而复杂的项目可以复杂的配置。。。

https://github.com/notyy/sbtTemplate 是我配置好的一个sbt项目,已经配置好了单元测试框架specs2,log引擎logback,slf4j,和eclipse项目生成插件sbteclipse,拿来改改就可以用,单元测试覆盖率工具由于版本未跟上sbt新版本因此暂时不能用,过一阵会更新上。建议读者先checkout这个项目再继续往下读,以便随时可以做做实验。

  1. sbt项目的目录规约
    和maven一样,sbt有约定了一个通用的目录结构,使用约定的结构会使后面的工作简单很多。
    base/  
              build.sbt              //构建配置文件
             /project                 //也是构建配置的一部分
                          /build.scala                         //高级配置,可选
             /src/
                    /main
                              /scala
                              /java
                             /resources
                   /test
                              /scala
                              /java
                             /resources
    base代表项目的根目录
    项目配置可以在build.sbt文件里定义,也可以在base/project/build.scala文件里定义,一般情况下build.sbt就已经足够,除非多工程项目或者需要很多特殊定义的项目
  2. 常用命令
    在我读完sbt的getting started文档之前,我也经常有疑问:为什么scala不沿用maven,而要搞出sbt这么个(not so simple) Simple Build Tool ?
    在读完文档,并实际操作后,我现在感觉确实是物有所值的。
    checkout 我的sbtTemple项目后,进入命令行,进入到项目根目录,输入sbt回车进入sbt交互模式
    sbt有哪些命令可用?输入help命令查询,即会列出一堆可用的命令,比如exit,reload等,不知道某个命令的作用?help 命令名,比如输入help exit显示exit命令的作用。 
    列出的命令里并没有compile,test等常用的命令?因为那些不是sbt的命令而是当前工程的task. 输入 tasks命令,就可以看见 compile,test,package等等任务的说明了。
    想查看项目的配置?用show命令,输入show name,看当前项目的名字,输入show libraryDependencies看当前项目依赖的库,libraryDependencies太长记不住?输入lib后按tab键! 交互窗口是有tab提示的!输入help show,你可以看到show命令的作用是显示配置的值,如果show之后跟的是任务,则执行该任务并显示任务执行的结果。 你可以试试show compile看什么结果,如果你不想执行compile,而是想看命令的说明,请用inspect命令,inspect命令比较复杂,执行后输出的结果也比较复杂,具体这个命令的作用是什么请help inspect, 不过得等理解了build definition的含义后才能看懂help说的是什么。。。
    常用的任务则有compile, test, run,package,doc等,请顾名思义或自行help之。另外这些任务常常还有些变种,比如package-doc,package-src等,用tasks命令查看任务的列表,必有一款适合您
    有一个强大的任务不得不特别拎出来说一下:console
    输入console回车,会在当前会话内启动一个REPL,不要告诉我你不知道REPL是scala解释器的意思。。。就是你在命令行下输入scala回车后进入的那个交互界面。
    强大的是,sbt会加载你的项目依赖的全部jar包和你自己的代码! 你可以在这个解释器里实验你的半成品。 我的模板工程里有一个sample/Account.scala文件,十几行很简单的代码,你可以看一下,然后在console窗口里玩弄Account类和Account伴生对象.  不过别忘了先import sample._
    因为依赖的jar包也都被加载了,所以对于那些你可能还不熟悉的第三方库,你有可以在console里玩个痛快!这功能很给力,谁用谁知道。
    顺便在提一下,sbt命令有3种执行模式:
    1、交互式,即上文所描述的
    2、批处理式,即在命令行下输入sbt 命令名来执行,比如sbt compile就会编译代码,而不进入交互模式
    3、连绵不绝式,在命令名前加上~号,即会进入连绵不绝模式,比如~compile,会编译当前代码,然后监听代码改变,每当你编辑了代码并保存后,sbt就会自动编译代码,~test也一样,当你修改代码后自动编译并运行单元测试。按回车键可退出此模式。
  3. build definition释义
    你前面应该试过show nameshow libraryDependencies了吧?show出来的结果就是来自你的build.sbt文件,也就是build definition了。打开build.sbt就可以看到name := "sbt11template"  还有其他的一堆xxx := xxxx,很显然的,这就是个key-value pair,  sbt就是读取配置文件并构建一个key-value的map. 但是在build.sbt里面并非key := value, 而是key := expression. 文件里的每一行其实是一句scala语句,不行你可以试试把
    name := "sbt11template" 改成
    name := {"sbt11template".toUpperCase} 
    然后reload,  再show name,你会看到变成大写的SBT11TEMPLATE
    :=是最常用的方法,其作用就是将key设置成expression的值,相同的key如果被多次赋值,则后面的值会覆盖掉前面的值。适用于简单类型的key,比如name,version等。
    其他的常用方法有
    +=,将值添加进现有值里,适用于集合类型的key,比如libraryDependencies
    ++=,将一个集合值加入当前集合里
    ~= ,。。这个牛X,你在~=后面写个函数,~=将key的当前值传给你的函数,然后将函数结果作为新值,比如你可以在name := xxx后面再来一句 
    name ~= { _. toUpperCase },一样是把name变成大写
    <<= 将另一个key的值赋给当前key,比如auther <<= name ,这个方法还有个高级用法,你可以组合多个其他key的值,赋给当前key,用文档里的例子
    name <<= (name, organization, version) { (n, o, v) => "project " + n + " from " + o + " version " + v }
    还有适用于集合类型的版本
    <+= 和 <++=
    这些语法的官方文档在此https://github.com/harrah/xsbt/wiki/Getting-Started-More-About-Settings

     
  4. 依赖管理
    对于不打算通过官方repository管理的第三方库,在项目目录下建个lib目录,把jar包扔进去就行了。
    希望sbt待为管理的则在build.sbt里用下面的语法加入
    libraryDependencies += groupID % artifactID % revision % configuration
    % configuration是可选的,表示某依赖库只在特定配置中需要,比如模板项目里的"org.specs2" %% "specs2" % "1.7.1" % "test" 是单元测试框架,只在测试时需要。
    如果你视力好,会看到其中有个 %%,而不是一个%,这表示要求sbt寻找用当前你配置的scala版本编译出来的jar包,这是因为scala不同版本编译出来的结果会不兼容(悲剧),希望以后scala社区会解决这不兼容的问题。。。
    对于依赖的java语言写的库的jar包,就没这问题了,比如libraryDependencies += "org.slf4j" % "slf4j-api" % "1.6.4" 就不需要%%了
    配置好依赖后,运行sbt update,sbt会自动到maven库和scala官方库里去找这些jar包并下载到你的用户目录的.ivy2目录里面,如果你不同的项目用了相同的库,则sbt下载一次就够了。
    如果你希望sbt从你自己配置的repository里下载,使用这个语法:
    resolvers += name at location
    比如
    resolvers += "Scala-Tools Maven2 Snapshots Repository" at "http://scala-tools.org/repo-snapshots"
    所有的一切都是通过key类配置的,key 的列表在http://harrah.github.com/xsbt/latest/sxr/Keys.scala.html  慢慢看吧。。。
  5. sbt插件
    现有的sbt插件的列表在https://github.com/harrah/xsbt/wiki/sbt-0.10-plugins-list   安装的方法各有不同,请自己查阅
    我的项目模板里已经配置了sbteclipse插件,运行sbt eclipse或在交互模式下输入eclipse回车即会生成相应的eclipse项目文件,然后你就可以在eclipse里用import  /  existing projects into workspace来导入了。
  6. 高级配置
    高级配置显然不是半熟的我能搞定的东西。。。

    全文结束,未在文中讲解的内容有scopes(github.com/harrah/xsbt/wiki/Getting-Started-Scopes), 插件的本质和开发(https://github.com/harrah/xsbt/wiki/Getting-Started-Using-Plugins), 多工程项目(https://github.com/harrah/xsbt/wiki/Getting-Started-Multi-Project), 自定义Setting和任务(https://github.com/harrah/xsbt/wiki/Getting-Started-Custom-Settings),有兴趣的请猛击链接,自行学习

分享到:
评论

相关推荐

    [SBT] SBT 入门教程 (Scala 实现) (英文版)

    [Packt Publishing] SBT 入门教程 (Scala 实现) (英文版) [Packt Publishing] Getting Started with SBT for Scala (E-Book) ☆ 图书概要:☆ Equip yourself with a high-productivity work environment using ...

    从BST到SBT

    ### 从BST到SBT:深入理解二叉搜索树及自平衡二叉搜索树 #### 1. 引言 在计算机科学领域中,数据结构的设计对于提高算法效率至关重要。其中,二叉搜索树(Binary Search Tree, BST)作为一种基本且高效的数据结构,...

    sbt资源包,全平台版本sbt-platform

    在 Scala 开发环境中,Sbt 起到了核心作用,它负责编译、测试、打包以及发布 Scala 应用程序。"sbt资源包,全平台版本sbt-platform"是一个包含了Sbt全平台支持的综合包,特别适合Scala开发者的使用。 这个压缩包的...

    sbt-1.9.0.tgz

    它以其高效、灵活和可扩展性而受到开发者的广泛欢迎。在本文中,我们将深入探讨SBT的基本概念、功能以及如何使用它来管理项目。 首先,让我们理解SBT的核心概念。SBT基于一个简单的思想:构建应该是声明式的,而...

    sbt 1.0.3.zip

    在`build.sbt`文件中,你可以定义项目依赖,并且SBT会自动下载并管理这些依赖,确保正确版本的库被引入到项目中。 2. **构建脚本**:`build.sbt`文件是SBT的核心,它是一个包含Scala代码的文本文件,用于定义项目...

    sbt-1.3.8.tar.gz

    总之,sbt-1.3.8是Scala开发不可或缺的一部分,它提供了高效、灵活的构建解决方案,且易于集成到各种开发工作流程中。正确安装和验证这个压缩包后,开发者可以充分利用sbt的功能来提升项目的开发效率和质量。

    scala-sbt_API

    9. **发布与部署**:SBT支持发布到Maven仓库或私有仓库,方便团队成员共享和使用。同时,可以配置发布到云服务,如Heroku。 10. **代码质量检查**:SBT可以集成代码质量检查工具,如Scalastyle和scapegoat,帮助...

    sbt-Starter:简单的 sbt 入门项目,第一个 Java 或 Scala 示例

    **标题解析:** “sbt-Starter”是一个针对新手的项目,旨在帮助用户入门`sbt`(Scala Build Tool)。...通过这个项目,开发者可以学习到如何设置项目结构,管理依赖,以及如何使用sbt进行编译、测试和打包等基本操作。

    SBT 1.2.3最新版

    2. **依赖管理**:SBT通过 Ivy 库管理项目依赖,可以方便地从Maven中央仓库或其他存储库拉取依赖。开发者可以在`build.sbt`中声明依赖,并指定其版本。 3. **项目结构**:SBT支持多项目构建,一个顶级的`build.sbt`...

    sbt-0.13.17

    3. **依赖管理**:sbt通过Ivy库管理系统来处理项目依赖,可以从Maven中央仓库或其他自定义仓库拉取依赖。 4. **插件系统**:sbt允许扩展其功能,如添加对ScalaTest的支持,或者实现自定义的任务和设置。 5. **交互...

    sbt-1.2.1.zip 最新版 下载

    下载sbt-1.2.1.zip后,解压到本地,然后根据官方文档或社区教程配置环境变量,将Sbt添加到系统的PATH中。完成这些步骤后,你就可以在命令行中使用`sbt`命令来启动Sbt,并开始构建和管理你的Scala项目了。 总结,Sbt...

    sbt-1.3.2.msi

    sbt参考手册 SBT是斯卡拉,Java和构建工具 更多。它需要Java 1.8或更高版本。 安装 有关设置说明,请参见安装sbt。 入门 要开始使用,请阅读《 入门指南》。如果您事先对全局有正确的了解,则可以节省很多时间...

    windows 10 系统Scala和sbt环境配置教程方法.docx

    下载完成后,安装 SBT 并将安装目录的 bin 文件夹路径添加到系统环境变量 Path 中,但不需要添加到用户变量的 Path 中。 在 SBT 安装完成后,需要配置 SBT 的仓库镜像源。打开 SBT 安装路径下的 conf 文件夹,新建...

    sbt 0.13 API (source)

    Sbt(Simple Build Tool)是Scala项目的主要构建工具,以其高效、灵活和强大的特性而受到广大开发者喜爱。sbt 0.13 版本是该工具的一个稳定版本,发布于2016年11月13日。本文将深入探讨sbt 0.13的API源代码,帮助...

    sbteclipse

    `sbt eclipse` 插件的使用,大大简化了在 Eclipse 中进行 Scala 开发的流程,同时也使得开发者能够在保持 sbt 构建优势的同时,享受到 IDE 提供的高级开发功能。通过这个插件,开发人员可以更加高效地进行多语言项目...

    sbt-1.3.13.zip

    这个版本是截止描述时的较新版本,对于开发者来说,能够快速地获取到这样的安装包是非常有益的,尤其是在sbt官方网站下载速度较慢的情况下。 **SBT的核心特性与作用:** 1. **自动化构建**:SBT通过使用Scala语言...

    sbt-1.0.2.zip

    使用sbt作为构建工具,开发者可以方便地管理Spark项目,包括构建Spark应用、测试和部署到集群。 在【压缩包子文件的文件名称列表】中,只有一个条目"**sbt**",这通常意味着压缩包内可能包含了整个sbt的安装目录...

    sbt-1.0.0.msi

    Sbt

    Eclipse下创建sbt项目

    在Windows平台上,可以从http://www.scala-sbt.org/release/tutorial/Installing-sbt-on-Windows.html下载msi安装包,然后直接安装。 二、创建项目结构 创建一个文件夹,例如SparkLongZhou,这个文件夹将作为项目...

    sbt-launch.jar

    例如,如果你的项目依赖于0.13.9版本的SBT,你可以将sbt-launch-0.13.9.jar添加到你的项目配置中,以便在运行SBT时使用该特定版本。 在实际使用中,通常不直接操作sbt-launch.jar,而是通过设置SBT的全局或者项目...

Global site tag (gtag.js) - Google Analytics