一、sbt簡介
sbt是類似ANT、MAVEN的構建工具,全稱為Simple build tool,是Scala事實上的標准構建工具。
主要特性:
- 原生支持編譯Scala代碼和與諸多Scala測試框架進行交互;
- 使用Scala編寫的DSL(領域特定語言)構建描述
- 使用Ivy作為庫管理工具
- 持續編譯、測試和部署
- 整合scala解釋器快速迭代和調試
- 支持Java與Scala混合的項目
二、sbt安裝
在sbt官網下載,這里我是下載的sbt-0.13.11.zip,下載后加壓到自己定義的文件夾,然后將解壓目錄的bin目錄加入PATH環境
Linux環境,使用`sudo vim /etc/profile`打開配置文件,添加下面的命令
export SBT_HOME=/opt/sbt
export path=path:$SBT_HOME/bin
Windows環境,打開高級系統設置,在環境變量中添加系統變量
SBT_HOME => D:\sbt
並加入path路徑,
path=> path;%SBT_HOME%\bin
安裝完成后,檢驗是否安裝成功。
使用sbt命令,該命令會執行一段時間,下載jar包,加載插件,最后查看是否進行交互界面,如下圖所示
C:\Users\test>sbt [info] Loading global plugins from C:\Users\test\.sbt\0.13\plugins [info] Set current project to test(in build file:/C:/Users/test/) >
sbt的簡單配置
配置ivy目錄
可以對sbt進行配置,能夠配置ivy的文件目錄,ivy是sbt的默認管理項目依賴工具,它默認是在user home下建立library repository,但用戶可以配置ivy的library local repository。
修改sbt配置文件: [sbt安裝目錄]/conf/sbtconfig.txt,在配置文件中添加一行
-Dsbt.ivy.home=[你自己挑選的目錄]/repository
配置庫
感覺sbt運行時會從maven官網下載大量的jar包,可能會非常緩慢,可以添加國內的maven庫,從而能夠加快運行速度,在”~/.sbt”下創建repositories文件,添加下面的內容:
[repositories] local # 本地ivy庫
maven-local: file://~/.m2/repository # 本地Maven庫 osc: http://maven.oschina.net/content/groups/public/ #開源中國的maven庫,用於加快速度 typesafe: http://repo.typesafe.com/typesafe/ivy-releases/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext], bootOnly sonatype-oss-releases maven-central sonatype-oss-snapshots
配置插件
sbt有自己的插件,這里介紹能夠生成eclipse目錄的插件:sbteclipse插件https://github.com/typesafehub/sbteclipse。
添加sbteclipse插件可以通過兩種方式添加:
- 配置全局文件:~/.sbt/0.13/plugins/plugins.sbt
- 配置項目文件: PROJECT_DIR/project/plugins.sbt
在其中一個文件添加一行
addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "4.0.0")
安裝sbteclipse插件后可以在sbt交互界面使用`eclipse`命令生成eclipse項目
三、sbt構建Scala項目
簡單構建Scala項目
創建文件SimpleProject/hw.scala
object Hi{ def main(args: Array[String]) = println("Hello world!") }
運行
D:\MyCode\Scala\SimpleProject>sbt Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0 [info] Loading global plugins from C:\Users\test\.sbt\0.13\plugins [info] Set current project to hello (in build file:/D:/MyCode/Scala/SimpleProject/) > run [info] Updating {file:/D:/MyCode/Scala/SimpleProject/}root... [info] Resolving org.fusesource.jansi#jansi;1.4 ... [info] Done updating. [info] Compiling 1 Scala source to D:\MyCode\Scala\BuildProject\target\scala-2.10\classes... [info] Running Hi Hello world! [success] Total time: 43 s, completed 2016-4-9 20:16:21
構建Scala完整項目
sbt項目目錄與Maven項目目錄類似,創建下面的目錄
├── src
│ ├── main
│ │ ├── java
│ │ ├── resources
│ │ └── scala
│ ├── test
│ │ ├── java
│ │ ├── resources
│ │ └── scala
├── build.sbt
├── project
│ ├── build.properties
│ ├── plugins.sbt
其中bulid.sbt為構建定義,project目錄是你的工程內另一個工程的項目,它知道如何構建你的工程,即project項目為元構建,相關文檔為http://www.scala-sbt.org/0.13/docs/zh-cn/Organizing-Build.html。
簡單的bulid.sbt文件
name := "hello" // 項目名稱 organization := "xxx.xxx.xxx" // 組織名稱 version := "0.0.1" // 版本號 scalaVersion := "2.10.6" // 使用的Scala版本號 // 添加項目依賴 libraryDependencies += "ch.qos.logback" % "logback-core" % "1.0.0" libraryDependencies += "ch.qos.logback" % "logback-classic" % "1.0.0" // 或者 libraryDependencies ++= Seq( "ch.qos.logback" % "logback-core" % "1.0.0", "ch.qos.logback" % "logback-classic" % "1.0.0", ... ) // 添加測試代碼編譯或者運行期間使用的依賴 libraryDependencies ++= Seq("org.scalatest" %% "scalatest" % "1.8" % "test")
創建項目目錄並添加配置文件完成后,生成eclipse項目:在項目基目錄下運行下列命令
sbt eclipse
通過上面的命令能夠生成eclipse目錄,使用eclipse導入項目,即可開始開發。
四、sbt的交互模式
在項目目錄下運行sbt命令進行交互模式
sbt
在交互模式中能夠運行常見的命令,例如,進行compile:
> compile
其它常見命令
| clean | 刪除所有生成的文件 (在 target 目錄下)。 |
| compile | 編譯源文件(在 src/main/scala 和 src/main/java 目錄下)。 |
| test | 編譯和運行所有測試。 |
| console | 進入到一個包含所有編譯的文件和所有依賴的 classpath 的 Scala 解析器。輸入 :quit, Ctrl+D (Unix),或者 Ctrl+Z (Windows) 返回到 sbt。 |
| run <參數>* | 在和 sbt 所處的同一個虛擬機上執行項目的 main class。 |
| package | 將 src/main/resources 下的文件和 src/main/scala 以及 src/main/java 中編譯出來的 class 文件打包成一個 jar 文件。 |
| help <命令> | 顯示指定的命令的詳細幫助信息。如果沒有指定命令,會顯示所有命令的簡介。 |
| reload | 重新加載構建定義(build.sbt, project/*.scala, project/*.sbt 這些文件中定義的內容)。在修改了構建定義文件之后需要重新加載。 |
