本文介绍一些关于sbt的使用,关于sbt的安装,请参考sbt install
使用sbt进行编译
对于sbt来说,最简单的工程就是某个目录下只有一个scala文件。对于这种文件,在当前目录下运行sbt,进入sbt控制台后执行run即可。
vim HelloWorld.scala
|
|
执行:
sbt工程的目录结构
Sbt工程的目录结构和Maven的有点儿类似:
src目录结构
- src/main/java 存放Java源代码
- src/main/resources 存放相应的资源文件
- src/main/scala 存放Scala源代码
- src/test/java 存放Java的测试源代码
- src/test/resources 存放测试相应的资源文件
- src/test/scala 存放Scala的测试源代码
build.sbt
build.sbt是build的定义文件。SBT运行使用两种形式的build定义文件:一种是放在根目录下的,即build.sbt文件,是一种简化的build定义;另一种是放在project目录下,采用纯Scala语言编写,更加复杂,当然也更加完备,更加具有表现力。
一个简单的build.sbt文件的内容
其中name和version是必须的,在生成jar的时候,这两个值会作为jar的名称的一部分而存在。
处理上面的部分信息,还可以在build.sbt中添加项目的依赖信息
项目目录及相关文件介绍
项目目录下的几个文件实际上都是非必需存在的,恩可以根据情况自由添加。
build.properties
该文件声明使用的要使用哪个版本的SBT来编译当前项目,最新的sbt boot launcher能够兼容编译所有0.10.x版本的SBT,比如如果我们使用的是0.12版本的sbt,但是却想用0.11.3版本的sbt来编译当前项目,则可以在build.properties文件中添加sbt.version=0.11.3进行指定。默认,当前项目的构建采用的是sbt boot lancher对应的版本。
plugins.sbt
该文件用来生命当前项目希望使用那些插件来增强当前项目的sbt功能的使用。比如assembly功能等,都有相应的sbt插件供使用,要使用这些插件只需要在plugins.sbt中声明即可:
为了能够成功加载这些sbt插件,我们将他们的查找位置添加到resolovers当中。另外,sbt支持直接将相应的github项目作为依赖或者插件依赖,而不用先将相应的依赖或插件发布到maven或ivy的repository中才能用。
其他
以上目录和文件通常是在创建项目的时候需要我们创建的,实际上,SBT还会在编译或运行期间自动的生成某些目录或文件。比如SBT会在项目的根目录下和project目录下生成target目录,并将编译结果和某些缓存信息保存于其中,一般情况,我们不希望将这些目录和文件添加到版本控制中。
SBT的使用
SBT支持两种使用方式:
- 批处理模式
- 可交互模式
大多情况下,我们会采用managed dependencies方式来管理依赖,但是在需要快速构建项目的情况下,会使用unmanaged dependencies来管理依赖。
Unmanaged Dependencies
要使用unmanaged dependencies的方式来管理依赖其实很简单,只需要将依赖的jar包放到lib目录下即可。
如果想修改默认的lib目录,可以通过配置进行修改,如3dlibs:
通常采用默认目录lib即可,这对于大多数项目都是首选。
Managed Dependencies
managed Dependencies采用Apache lvy的依赖管理方式,可以支持从Maven或lvy的Repository中现在对应的依赖。
要在SBT中使用managed dependencies,需要在libraryDependencies中添加所需要的依赖,一般格式如下:
Resovers
对于managed dependencies来说,虽然我们指定了依赖库,但是SBT并不知道去哪里获取这些库以及相关资料。
默认情况下,SBT会去默认的Maven2的Repository中获取依赖,但是如果默认的Repository中找不到我们的依赖,那么我们可以通过resolver机制来追加更多的repository,以便SBT去获取:
at前面的字符串指定了要追加的repository的标志名称,at后面的字符串指定了要追加repository的路径。
除了可以添加远程的Maven Repository,也可以将本地的Maven Repository添加的resolver的范围中:
使用实例
本人想要使用SBT对自己的spark application代码进行编译打包
手动创建项目目录以及文件
|
|
创建Application文件
|
|
创建sbt构建文件
|
|
使用sbt对项目进行打包
|
|
执行spark的任务提交命令spark-submit
|
|
注意,该实例中,没有使用到除了spark之外的第三方jar包