原文地址:http://my.oschina.net/jingxing05/blog/287056
新建sbt项目
sbt没有新建project生成基本目录的功能 没有类似 sbt init的功能
sbt支持的目录结构,可以手动创建,这不费什么事,也可采用从其他标准sbt项目拷贝
.
|-- build.sbt 主构建文件
|—lib 第三方jar包
|—project 下有另一个可编程的Build.scala构建文件可实现高级复杂功能
|-- src
| |-- main
| | |-- java
| | |-- resources
| | |-- scala
| |-- test
| |-- java
| |-- resources
| |-- scala
|—target 可选
也可以使用这个工具 Giter8
惯例:build.sbt定义主要简单的配置,对于构建逻辑放到project下的.scala文件中,用于更复杂定义和共享代码
build.sbt文件
与 build.xml build.gradle pom.xml 文件一样是主构建文件
build.sbt文件包含项目的大部分设置, 注意某项配置使用 空 行 来分隔的
本质上该文件是scala Seq[Settings[_]] 的一个实例,每一行代表一个Setting[_] ,而Setting是一个键值对 key := value ,多个键值对之间用 空行 分隔
sbt文件中不允许出现顶层object和class
key 的类型有: SettingKey[T] TaskKey[T] InputKey[T] , := 是 这个 key的方法, 返回 一个 Setting[T] 对象
taskkey依赖Settingkey Settingkey不能依赖taskkey。因为settingkey只解析一次, 而taskkey可执行多次
更改sbt运行日志级别
logLevel := Level.Debug|Info|Warning|Error
使用sbt插件
在project/plugins.sbt中添加所需要的插件:
resolvers += Resolver.url("artifactory",
url("http://scalasbt.artifactoryonline.com/scalasbt/sbt-plugin-releases"))(Resolver.ivyStylePatterns)
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.10.0")
基本构建信息
name := "BasicProjectWithScalaTest" 项目名称
version := "1.0" 项目版本 这个会添加到jar包名后
scalaVersion := "2.11.1" 使用的 scala的版本
使用不同的Ivy仓库,提速
使用Seq为resolvers添加,形如:
1
2
3
4
5
6
|
resolvers
++= Seq( "OSChina
Maven"
at "http://maven.oschina.net/content/groups/public/" , "OSChina
Maven thirdparty"
at "http://maven.oschina.net/content/repositories/thirdparty/" , "Typesafe"
at "http://repo.typesafe.com/typesafe/releases/" , "Java.net
Maven2 Repository"
at "http://download.java.net/maven/2/" ) |
依赖管理
可以直接将jar包放到 lib目录下
scope范围概念 不同环境的依赖
一个scope中配置值单一,同一个配置 在不同scope的值 可以不同
sbt提供三种scope维度:
projects :每个项目单独配置
configurations : 运行环境角度 -》 Compile(默认) Test Runtime
tasks
添加单个依赖
libraryDependencies += “groupID” % “artifactID” % “revision” % “scope”
多个依赖
libraryDependencies ++= Seq( // ++= 是个方法哦,用来叠加Seq对象
"com.typesafe.akka" %% "akka-actor" % "2.3.+", //“groupID” % “artifactID” % “revision” % “scope”
"com.typesafe.akka" %% "akka-testkit" % "2.3.+", //%%表示生成在artifactID之后附带 _scalaVersion
"org.scalatest" %% "scalatest" % "2.1.+" % "test",
"junit" % "junit" % "4.+" % "test",
"com.novocode" % "junit-interface" % "0.+" % "test"
)
Build.scala用来配置multiProjects
配置入口类
mainClass in (Compile, packageBin) := Some("com.alvinalexander.Foo")
基本命令
可以先试试 sbt的基本命令:
scala的包名不一定与实际的文件夹名字匹配
compile 编译 src下和项目根目录下的scala或Java文件 ~ compile会监视文件更改然后立即重新编译
run命令会自动搜索main方法
package-doc打包文档为jar包
inspect 查看某项配置
doc 生成API文档
package打包后的jar包 在target scala版本下面,可以使用 jar tvf 查看被打包的文件 scala xxx.jar则直接运行
update 更新依赖
test运行所有测试
reload 重新加载sbt文件
publish 发布到远程仓库 publish-local
clean 清空target目录
console 编译当前项目的代码,放到classpath 中,然后启动scala控制台REPL
last run 查看上次run 错误的 stacktrace