focus on :html
什麼是 SBT ?java
SBT 項目工程目錄git
SBT 編譯打包 Scala HelloWorldgithub
SBT 是 Simple Build Tool 的簡稱. SBT 能夠認爲是 Scala 世界的 maven。express
SBT的着迷特性,好比:緩存
DSL build構建, 並可混合構建 Java 和 Scala 項目;markdown
經過觸發執行 (trigger execution) 特性支持持續的編譯與測試;maven
能夠重用 Maven 或者 ivy的repository 進行依賴管理;測試
增量編譯、並行任務等等...ui
一個極致簡單的 Scala項目 (hello simple project)
hello/HelloWorld.scala
object HelloWorld { def main(args: Array[String]) { println("Hello, SBT") } }
sbt run
➜ hello git:(master) ✗ sbt [info] Set current project to hello (in build file:/Users/hp/ghome/Spark-Scala/hello/) > run [info] Updating {file:/Users/hp/ghome/Spark-Scala/hello/}hello... [info] Resolving org.fusesource.jansi#jansi;1.4 ... [info] Done updating. [info] Compiling 1 Scala source to /Users/hp/ghome/Spark-Scala/hello/target/scala-2.10/classes... [info] Running HelloWorld Hello, SBT [success] Total time: 3 s, completed 2016-3-17 9:38:44 >
一個典型的SBT項目工程結構以下圖所示:
build.sbt 詳解
build.sbt 至關於 maven-pom.xml,它是build定義文件。
SBT 運行 使用 2 種形式 的 build 定義文件,
one, put your project's base directory,-- build.sbt, a simple build definition;
other one, put project directory,can Use Scala language, more expressive。
一個簡單的build.sbt文件內容以下:
name := "hello" // 項目名稱 organization := "xxx.xxx.xxx" // 組織名稱 version := "0.0.1-SNAPSHOT" // 版本號 scalaVersion := "2.9.2" // 使用的Scala版本號 // 其它build定義
name 和 version的定義是必須的,由於若是想生成jar包的話,這兩個屬性的值將做爲jar包名稱的一部分, 各行之間以空行分隔。
除了定義以上項目相關信息,咱們還能夠在build.sbt中添加項目依賴:
// 添加源代碼編譯或者運行期間使用的依賴 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")
固然, build.sbt文件中還能夠定義不少東西,好比添加插件,聲明額外的repository,聲明各類編譯參數等等
project目錄即相關文件介紹
project目錄下的幾個文件能夠根據狀況添加。
build.properties 文件聲明使用的要使用哪一個版本的SBT來編譯當前項目, 最新的sbt boot launcher能夠可以兼容編譯全部0.10.x版本的SBT構建項目,好比若是我使用的是0.12版本的sbt,但卻想用0.11.3版本的sbt來編譯當前項目,則能夠在build.properties文件中添加sbt.version=0.11.3來指定。
plugins.sbt 文件用來聲明當前項目但願使用哪些插件來加強當前項目使用的sbt的功能,好比像assembly功能,清理ivy local cache功能,都有相應的sbt插件供使用, 要使用這些插件只須要在 plugins.sbt 中聲明便可.
爲了可以成功加載這些sbt插件,咱們將他們的查找位置添加到resolovers當中.
其餘
$ touch build.sbt $ mkdir src $ mkdir src/main $ mkdir src/main/java $ mkdir src/main/resources $ mkdir src/main/scala $ mkdir src/test $ mkdir src/test/java $ mkdir src/test/resources $ mkdir src/test/scala $ mkdir project $ ...
可使用giter8來自動化以上步驟.
giter8的更多信息可參考https://github.com//giter8.
actions – 顯示對當前工程可用的命令
update – 下載依賴
compile – 編譯代碼
test – 運行測試代碼
package – 建立一個可發佈的jar包
publish-local – 把構建出來的jar包安裝到本地的ivy緩存
publish – 把jar包發佈到遠程倉庫(若是配置了的話)
more cmd
test-failed – 運行失敗的spec
test-quick – 運行全部失敗的以及/或者是由依賴更新的spec
clean-cache – 清除全部的sbt緩存。相似於sbt的clean命令
clean-lib – 刪除lib_managed下的全部內容
SBT Scala HelloWorld 具體請看 : Scala-Projects/HelloWorld
➜ HelloWorld> sbt package
[info] Loading project definition from /Users/hp/spark/HelloWorld/project [info] Set current project to HelloWorld (in build file:/Users/hp/spark/HelloWorld/) [info] Packaging /Users/hp/spark/HelloWorld/target/scala-2.11/helloworld_2.11-0.0.1-SNAPSHOT.jar ... [info] Done packaging. [success] Total time: 1 s, completed 2016-3-17 9:05:44
➜ HelloWorld> sbt run
[info] Loading project definition from /Users/hp/spark/HelloWorld/project [info] Set current project to HelloWorld (in build file:/Users/hp/spark/HelloWorld/) [info] Running Hi Hi! [success] Total time: 1 s, completed 2016-3-17 9:07:43
Spark HelloWorld 具體請看 : Spark-Projects/HelloWorld
➜ HelloWorld> sbt compile
➜ HelloWorld> sbt package
$SPARK_HOME/bin/spark-submit \ --class "HelloWorld" \ target/scala-2.11/helloworld_2.11-1.0.jar
參考 : scala-sbt.org/0.13/docs/zh-cn/Getting-Started.html
參考 : CSUG/real_world_scala/blob/master/02_sbt.markdown
參考 : scala-sbt.org/0.13.1/docs/Getting-Started
參考 : 譯言網