您的位置:首页 > 编程语言 > Java开发

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.g8
Akka项目模版

playframework/play-scala-seed.g8
PlayFramework项目模版

关于 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
信息如下:

包介绍GroupIdArtifactId
MySQL JDBC Drivermysqlmysql-connector-java
Scala Reflectorg.scala-langscala-reflect
Scala Swingorg.scala-lang.modulesscala-swing_[Scala版本号]
Scala Testorg.scalatestscalatest_[Scala版本号]
ScalaFxorg.scalafxscalafx_[Scala版本号]
Slickcom.typesafe.slickslick_[Scala版本号]
Akkacom.typesafe.akkaakka-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模版名称]
创建对应的项目模版。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  scala java sbt