SBT和Lightbend Activator的使用
2016-07-27 11:23
417 查看
sbt 简介
sbt全称
Simple Build Tool,是
Scala项目的标准构建工具,类似于
Java下的
Maven/
Groovy中的
Gradle。
与其它
Java构建工具类似,
sbt的核心功能如下:
项目的构建。
项目依赖自动化管理。
提供统一的工程结构。
提供交互式的
sbt shell。
安装与配置
主流Linux发行版的仓库中,一般都包含
sbt,可以使用发行版的包管理器安装
sbt,以
ArchLinux为例:
# pacman -S sbt
在Windows环境下,可以从官网
http://www.scala-sbt.org/download.html中下载。
下载完成之后解压并将目录下的
bin目录加入
PATH中。
如果已经安装了
Activator,则无需再安装
sbt,
Activator中已经包含了
sbt。
启动与使用
在任意目录下输入sbt指令,即可进入
sbt shell,
sbt会将当前路径作为
sbt项目的根目录。
终端会输入如下信息:
[info] Set current project to sbt (in build file:xxx...) >
若路径为有效的
sbt项目路径,则在
sbt shell中输入
run指令会尝试编译源码执行项目。
旧版的
sbt中(
sbt 0.7.x之前),在
sbt shell中输入
run指令会在路径下生成完整的sbt项目结构,但新版的sbt已不提供此特性(可使用
sbt new指令创建项目)。
常见指令如下:
compile编译项目
update更新依赖
test运行测试用例
run运行项目
clean清理项目缓存
package将项目打包
console进入Scala REPL
reload重新加载项目的
build.sbt构建配置
sbt指令在
sbt shell内使用,部分指令也可作为参数跟在
sbt指令之后直接在命令行中使用。
使用 Giter8 模版
Giter8是由
Nathan Hamblen在
2010年开始发起的模版项目,目前由
foundweekends项目维护。
在
sbt 0.13.13版本后,可使用
sbt new指令创建基于
Giter8模版的项目:
$ sbt new [Giter8模版名称]
使用
sbt new指令新建模板项目,根据模板类型,会交互式地要求输入一些项目信息。
之后会在
当前目录/项目名称路径下生成指定模板的目录结构。
Lightbend系列的各项技术均提供了基于
Giter8的官方项目模版,常用模版名称如下:
scala/scala-seed.g8普通Scala项目模版
akka/akka-scala-seed.g8Akka项目模版
playframework/play-scala-seed.g8PlayFramework项目模版
关于 No Scala version specified or detected 错误
当sbt版本升级后,若
~/.ivy2/cache路径下存在旧版
sbt的
jar包,则在终端执行
sbt指令时,会出现以下错误输出:
Error during sbt execution: No Scala version specified or detected
出现错误的原因是存在旧版本的
sbt包缓存,解决方案是移除
~/.sbt和
~/.ivy2/cache/org.scala-sbt目录。
执行以下指令:
$ rm ~/.sbt ~/.ivy2/cache/org.scala-sbt
项目结构
sbt项目结构与
Maven项目类似。
一个基本的
sbt项目具有以下目录结构:
项目名称 ├── build.sbt # 构建定义 ├── project │ ├── plugins.sbt # 添加sbt插件 │ └── build.properties # 构建规则与参数 └── src # 源码目录 ├── main │ ├── resources │ └── scala │ ├── Xxx.scala │ ├── Xxx.scala │ └── ... └── test ├── resources └── scala ├── Xxx.scala ├── Xxx.scala └── ...
新创建的项目没有
target目录,在
sbt shell中执行了
run后会生成
target和
project/target目录。
target目录中包含的所有内容均由编译系统生成,将项目目录加入版本控制时需要忽略这些目录。
依赖管理
通过设定build.sbt文件中的
libraryDependencies变量即可向项目中添加托管依赖。
libraryDependencies配置项实际上是一个类型为
sbt.SettingKey[scala.Seq[sbt.ModuleID]]的变量。
每一项依赖由
sbt.ModuleID类型定义,一个具体的依赖项格式如下所示:
// 普通依赖,通常适用于Java依赖包 groupID % artifactID % revision // 在指定配置下的依赖 groupID % artifactID % revision % configuration // 对于开放源码的库,可以指定在添加依赖时同时下载库源码和Java DOC groupID % artifactID % revision % withSource() withJavadoc()
对于多数使用Scala开发的项目,项目的
artifactID命名上通常会以使用Scala版本号作为结尾(
Scala编译器相关模块除外,如
scala-reflect、
scala-compiler等)。
在添加
Scala项目依赖时,使用
%%操作符连接
groupID和
artifactID,则会将当前Scala版本号追加到
artifactID上:
groupID %% artifactID % revision
等价于:
groupID % artifactID_[Scala版本] % revision
以
Scala 2.12的
Akka 2.4.17为例,依赖信息为:
"com.typesafe.akka" %% "akka-actor" % "2.4.17" //省略Scala版本信息 "com.typesafe.akka" % "akka-actor_2.12" % "2.4.17" //两种表示方式等价
sbt.SettingKey类型重载了
+=和
++=运算符:
+=运算符用于添加单项依赖,如:
libraryDependencies += groupID % artifactID % revision
++=运算符用于添加多个依赖序列,如:
libraryDependencies ++= Seq( groupID0 % artifactID0 % revision0, groupID1 % artifactID1 % revision1, ... )
常用依赖
sbt依赖的描述信息与
Maven相同,
sbt允许直接添加
Maven仓库的依赖,包的信息可以在Maven中心仓库搜索到,地址为
http://search.maven.org/。
一些常用包的
GroupId和
ArtifactId信息如下:
包介绍 | GroupId | ArtifactId |
---|---|---|
MySQL JDBC Driver | mysql | mysql-connector-java |
Scala Reflect | org.scala-lang | scala-reflect |
Scala Swing | org.scala-lang.modules | scala-swing_[Scala版本号] |
Scala Test | org.scalatest | scalatest_[Scala版本号] |
ScalaFx | org.scalafx | scalafx_[Scala版本号] |
Slick | com.typesafe.slick | slick_[Scala版本号] |
Akka | com.typesafe.akka | akka-actor_[Scala版本号] |
Lightbend Activator (已废弃)
Activator提供了成套的
Scala开发环境,相当于:
Scala编译器 + sbt + Play Framework + Akka + 项目模版 + 基于Play的WEB端项目管理
Activator内置了sbt,可以直接使用
Activator管理、构建sbt项目。
安装与配置
多数Linux发行版没有将Activator添加到仓库中,因而无论是
Linux/Windows环境下,都需要从官网下载
Activator。
配置
Activator方式与
sbt类似。
从
http://www.lightbend.com/activator/download下载完整版的
Activator,解压后将
bin目录加入
PATH环境变量中即可。
基本操作
在普通目录中输入activator指令会在浏览器中打开Activator的帮助页面。
在
sbt项目目录中输入
activator指令会进入
sbt shell。
其它常见的指令:
$ activator ui进入WEB端的Activator界面
$ activator shell进入sbt交互shell
$ activator list-templates列出模版列表
Activator中带有大量的预定义项目模版,使用模版创建项目:
$ activator new [项目名称] [模版名称]
Activator同样支持与
sbt相同的指令。
后记
在2017-4-24的
Lightbend官方新闻(
https://www.lightbend.com/blog/introducing-a-new-way-to-get-started-with-lightbend-technologies-and-saying-goodbye-to-activator)中,宣布在
2017-5-24停止对
Activator的支持。
新闻中指出了
Activator在以下的情形存在缺陷:
将
Activator良好地运行在多样的机器类型上。
将
Activator可靠地运行在多样的网络环境上。
处理双重要求:
保持更新与
从不更新。
鉴于
Activator无法良好地实现以上要求,
Lightbend停止了对
Activator的支持并提供了以下替代方案:
基于
Web技术的
Project Starter:
在页面
http://developer.lightbend.com/start/中直接创建项目模版并将其下载到本地。
使用新增的
sbt new指令:
Giter8项目提供了
Lightbend各类技术对应的项目模版,使用
sbt new [Giter8模版名称]创建对应的项目模版。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序