SBT build HelloWorld

SBT build HelloWorld

focus on :html

  1. 什麼是 SBT ?java

  2. SBT 項目工程目錄git

  3. SBT 編譯打包 Scala HelloWorldgithub

1-1 SBT, What?

SBT 是 Simple Build Tool 的簡稱. SBT 能夠認爲是 Scala 世界的 maven。express

SBT的着迷特性,好比:緩存

  1. DSL build構建, 並可混合構建 Java 和 Scala 項目;markdown

  2. 經過觸發執行 (trigger execution) 特性支持持續的編譯與測試;maven

  3. 能夠重用 Maven 或者 ivy的repository 進行依賴管理;測試

  4. 增量編譯、並行任務等等...ui

1-2 Hello, SBT

一個極致簡單的 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
>

1-3 SBT 項目工程結構詳解

一個典型的SBT項目工程結構以下圖所示:

圖片描述

build.sbt 詳解

build.sbt 至關於 maven-pom.xml,它是build定義文件。

SBT 運行 使用 2 種形式 的 build 定義文件,

  1. one, put your project's base directory,-- build.sbt, a simple build definition;

  2. 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.

1-4 SBT Cmd

  1. actions – 顯示對當前工程可用的命令

  2. update – 下載依賴

  3. compile – 編譯代碼

  4. test – 運行測試代碼

  5. package – 建立一個可發佈的jar包

  6. publish-local – 把構建出來的jar包安裝到本地的ivy緩存

  7. publish – 把jar包發佈到遠程倉庫(若是配置了的話)

more cmd

  1. test-failed – 運行失敗的spec

  2. test-quick – 運行全部失敗的以及/或者是由依賴更新的spec

  3. clean-cache – 清除全部的sbt緩存。相似於sbt的clean命令

  4. clean-lib – 刪除lib_managed下的全部內容

1-5 Scala HelloWorld

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

1-6 Spark HelloWorld

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

1-7 Referenced article

參考 : 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
參考 : 譯言網

相關文章
相關標籤/搜索