SBT(Simple Build Tool)是Scala的项目构建工具,拥有依赖管理,构建过程管理和打包等功能.

SBT官网上给出各平台的安装方法:

  • MAC: 使用homebrew安装 brew install sbt
  • Ubuntu: 使用apt-get安装apt-get install
  • Win: 使用官网上的.msi安装

sbt可以管理的一个最简单的scala项目可以只有一个.scala文件. 编写一个hello.scala源文件:

object Hello {
def main(args: Array[String]) {
println("Hello, world!")
}
}

在源文件所在目录中输入sbt命令, 进入sbt交互终端:

$ ls
hello.scala $ sbt
[info] Set current project to hello (in build file:~/test_scala/hello/)
> run
[info] Running HelloWorld
Hello, world!
[success] Total time: 1 s

或者使用批处理模式执行命令:

$ sbt run
> $ sbt run
[info] Set current project to hello (in build file:~test_scala/hello/)
[info] Running HelloWorld
Hello, world!
[success] Total time: 1 s

标准SBT项目

虽然sbt可以管理只有一个scala源文件的项目, 但是大多数项目的结构远比这复杂. sbt建议的项目结构:

root
|- build.sbt
|- project
| |- build.properties
| |- plugins.sbt
|- src
| |- main
| | |- java
| | |- scala
| | |- resources
| |- test
| | |- java
| | |- scala
| | |- resources
| |- test
|- target

src目录下保存着项目源代码, src/main保存项目代码, src/test保存测试用例.target目录用于保存构建项目得到的目标代码.

sbt将项目根目录下的.sbt文件和project目录下的.scala文件作为构建管理文件.后者编写较为复杂, 但是可以实现一些.sbt无法实现的复杂功能.

有趣的是project本身也是一个标准的sbt项目, 其下也可以包含另一个project目录对其进行构建.

build.sbt

build.sbt中包含以下通用配置:

name := "hello"      // 项目名称

organization := "xxx.xxx.xxx"  // 组织名称

version := "0.0.1"  // 版本号

scalaVersion := "2.12.1"   // 使用的Scala版本号

name和version属性在项目打包时将作为包名的一部分. organization则是包名的前缀比如org.apache.spark.

build.sbt中声明依赖:

resolvers += "Typesafe Repository" at "http://repo.typesafe.com/typesafe/releases/"

libraryDependencies +=
"com.typesafe.akka" %% "akka-actor" % "2.1.4"

第三方库的作者通常会提供相应的配置, 比如Using Akka with SBT.

大多数情况下我们可以使用上述这种managed dependencies方式管理依赖, 它们采用的是Apache Ivy管理方式.

必要的时候可以使用本地jar包作为unmanaged dependencies.

将jar包放入项目根目录下的CustomLib目录, 然后在build.sbt中添加配置:

unmanagedBase := baseDirectory.value / "CustomLib"

baseDirectory即为项目根目录.

完成依赖配置之后, 运行sbt update命令下载并配置依赖库.

project

project目录下的配置文件其实并非必须, 这里简介一下:

  • build.properties: 主要用于声明sbt的版本等信息

  • plugins.sbt: 配置sbt插件

sbt指令

sbt拥有交互式和批处理式两种执行方式, 在终端中使用sbt命令即可进入sbt交互环境.

在sbt命令后添加指令即可进入批处理模式:

$sbt clean compile run package

上文我们提及了runupdate指令, 这里我们介绍一下常用指令:

  • clean: 清除target下生成的文件
  • update根据构建配置更新依赖项
  • compile: 编译项目
  • run <args>: 运行项目
  • console: 打开一个scala终端, 可以在其中引用当前项目的类
  • test: 运行test目录下的所有测试用例
  • package: 将src/main中的所有类打包为jar
  • reload: 重新载入构建配置文件
  • help 显示帮助

Scala构建工具SBT的更多相关文章

  1. Scala构建工具sbt的配置

    时间是17年12月24日.初学Scala,想使用它的标配构建工具sbt,结果好大一轮折腾,因为公司隔离外网,需要内部代理,所以尤其折腾.下面的配置参考了好多篇不同的文章,已经没法一一留下出处了.而且还 ...

  2. 项目自动构建工具对比(Maven、Gradle、Ant)

    Java世界中主要有三大构建工具:Ant.Maven和Gradle.经过几年的发展,Ant几乎销声匿迹.Maven也日薄西山,而Gradle的发展则如日中天. Maven的主要功能主要分为5点,分别是 ...

  3. Java 中三大构建工具:Ant、Maven和Gradle

    Java世界中主要有三大构建工具:Ant.Maven和Gradle 目前:Ant已经销声匿迹.Maven也没落了,而Gradle的发展则如日中天. Maven的主要功能主要分为5点,分别是依赖管理系统 ...

  4. 浅谈java构建工具的选择

    在学校的时候还总是自己用eclipse自带的jar导出工具,然后人工来给项目打包,那是相当的原始. 而后工作了,项目中都是用ant,慢慢的开始学会使用这个工具.感觉就和脚本一样,很容易读懂,做项目构建 ...

  5. 编译工具sbt部署

    目录 一.简介 二.部署 三.测试 一.简介 项目构建工具是项目开发中非常重要的一个部分,充分利用好它能够极大的提高项目开发的效率.在学习SCALA的过程中,我遇到了SBT(Simple Build ...

  6. Google软件构建工具Bazel FAQ

    Google软件构建工具Bazel FAQ 本文是我的翻译,原文在这里.欢迎转载,转载请注名本文作者和原始链接 注:如果想了解Bazel的原理,可以看看我之前翻译的Google Blaze原理及使用方 ...

  7. 学习笔记——Maven实战(六)Gradle,构建工具的未来?

    Maven面临的挑战 软件行业新旧交替的速度之快往往令人咂舌,不用多少时间,你就会发现曾经大红大紫的技术已经成为了昨日黄花,当然,Maven也不会例外.虽然目前它基本上是Java构建的事实标准,但我们 ...

  8. 项目管理及自动构建工具Maven

    项目管理及自动构建工具Maven 一.Maven安装.目录结构.cmd命令1.下载安装apache-maven-3.2.3-bin.zip下载:http://maven.apache.org/down ...

  9. 构建工具Gradle安装和简单使用

    1. 安装 到gradle官网下载页 https://gradle.org/gradle-download/ 下载gradle,其中“完全版(Complete distribution)”包含除了运行 ...

随机推荐

  1. 日常LINUX操作一

    1.use root accounthttp://blog.csdn.net/sunxiaoju/article/details/51993091http://blog.csdn.net/gongch ...

  2. 【NIFI】 Apache NiFI 安装及简单的使用

    NiFI介绍 NiFi(NiagaraFiles)是为了实现系统间数据流的自动化而构建的.虽然术语“数据流”用于各种上下文,但我们在此处使用它来表示系统之间的自动和管理信息流 官网地址:http:// ...

  3. 20175316盛茂淞 2018-2019-2《Java程序设计》第4周学习总结

    20175316盛茂淞 2018-2019-2<Java程序设计>第4周学习总结 教材学习内容总结 第五章 子类与继承 一.继承 1.继承定义:避免多个类间重复定义共同行为 2.子类与父类 ...

  4. 位运算------按位与、按位或、按位异或、取反、<<、>>、>>>

    程序中的所有数在计算机内存中都是以二进制的形式储存的,位运算就是直接对整数在内存中的二进制位进行操作. 知识点: 1.原码.反码.补码(以byte的1.-1举例) 示例                ...

  5. vue全局后置钩子afterEach

    beforeEach是路由跳转前执行的,afterEach是路由跳转后执行的. afterEach只有两个参数  afterEach((to,from)=>{}) 例子: router.afte ...

  6. 在Azure DevOps Server (TFS 2019) 流水线传递参数

    变量概述 在Azure DevOps Server的流水线中,变量是衔接不同任务和不通代理之间的桥梁,它可以使相对松散.各自独立的任务之间相关影响并共享数据.在流水线中使用变量,可以在各任务之间相互调 ...

  7. VS2017离线安装与Oracle数据库开发环境搭建

    记得之前使用VS2015打开老的MVC4项目,不能右键创建控制器和添加视图,让我非常不习惯!找遍了网络无果,最后只能回到VS2013,但我就是不喜欢用旧的VS,这是不是病... 1.将VS2017离线 ...

  8. c++ 异常处理(1)

    异常 (exception) 是 c++ 中新增的一个特性,它提供了一种新的方式来结构化地处理错误,使得程序可以很方便地把异常处理与出错的程序分离,而且在使用上,它语法相当地简洁,以至于会让人错觉觉得 ...

  9. Git使用01

    git 工作区:当前编辑的区域 缓存区:add 之后的区域 本地仓库:commit之后的区域 远程仓库:远程的区域 git init 初始化 git status 查看git的状态 git add 将 ...

  10. 程序猿的日常——工作中常用的Shell脚本

    工作当中总是会有很多常用的linux或者命令,这里就做一个总结 文件远程拷贝 如果想把文件从本机拷贝到远程,或者从远程下载文件到本地. # 把本地的jar拷贝到远程机器xxxip的/home/sour ...