sbt使用詳解
安裝:
我的系統為centos6.5故采用官方提供的在線安裝:
- curl https://bintray.com/sbt/rpm/rpm > bintray-sbt-rpm.repo
- sudo mv bintray-sbt-rpm.repo /etc/yum.repos.d/
- sudo yum install sbt
然后等完畢可以輸入 sbt sbt-version來進行查看安裝是否成功。(這一步可能會很辛苦因為第一次運行的時候他會下載很多東西,而且大部分資源都是在國外,很可能不成功,所以還是耐心點。我前幾篇有文章介紹加快sbt下載的文章可以去看下,但是感覺下載源的時候還是有點幫助。)
sbt執行步驟:
sbt 完全按照約定工作。sbt 將會自動找到以下內容:
- 項目根目錄下的源文件
src/main/scala
或src/main/java
中的源文件src/test/scala
或src/test/java
中的測試文件src/main/resources
或src/test/resources
中的數據文件lib
中的 jar 文件
默認情況下,sbt 會用和啟動自身相同版本的 Scala 來構建項目。 你可以通過執行 sbt run
來運行項目或者通過 sbt console
進入 Scala REPL。sbt console
已經幫你 設置好項目的 classpath,所以可以根據項目的代碼嘗試實際的 Scala 示例。
sbt結構說明
基礎目錄
在 sbt 的術語里,“基礎目錄”是包含項目的目錄。所以,如果你創建了一個和 Hello, World 一樣的項目hello
,包含 hello/build.sbt
和 hello/hw.scala
, hello
就是基礎目錄。
源代碼
源代碼可以像 hello/hw.scala
一樣的放在項目的基礎目錄中。然而,大多數人不會在真實的項目中這樣做,因為太雜亂了。 sbt 和 Maven 的默認的源文件的目錄結構是一樣的(所有的路徑都是相對於基礎目錄的):
src/
main/
resources/
<files to include in main jar here>
scala/
<main Scala sources>
java/
<main Java sources>
test/
resources
<files to include in test jar here>
scala/
<test Scala sources>
java/
<test Java sources>
src/
中其他的目錄將被忽略。而且,所有的隱藏目錄也會被忽略。
構建產品
構建出來的文件(編譯的 classes,打包的 jars,托管文件,caches 和文檔)默認寫在 target
目錄中。
交互模式
在你的項目目錄下運行 sbt 不跟任何參數:
$ sbt
執行 sbt 不跟任何命令行參數將會進入交互模式。交互模式有一個命令行(含有 tab 自動補全功能和歷史記錄)。
例如,在 sbt 命令行里輸入 compile
:
> compile
再次 compile
,只需要按向上的方向鍵,然后回車。 輸入 run
來啟動程序。 輸入 exit
或者 Ctrl+D (Unix)或者 Ctrl+Z (Windows)可以退出交互模式。
批處理模式
你也可以用批處理模式來運行 sbt,可以以空格為分隔符指定參數。對於接受參數的 sbt 命令,將命令和參數用引號引起來一起傳給 sbt。例如:
$ sbt clean compile "testOnly TestA TestB"
在這個例子中,testOnly
有兩個參數 TestA
和 TestB
。這個命令會按順序執行(clean
, compile
, 然后 testOnly
)。
常用命令
下面是一些非常常用的的 sbt 命令。更加詳細的列表請參見 命令行參考。
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 這些文件中定義的內容)。在修改了構建定義文件之后需要重新加載。 |
添加依賴庫
有兩種方式添加第三方的依賴。一種是將 jar 文件 放入 lib/
(非托管的依賴)中,另一種是在build.sbt
中添加托管的依賴,像這樣:
val derby = "org.apache.derby" % "derby" % "10.4.1.3" lazy val commonSettings = Seq( organization := "com.example", version := "0.1.0", scalaVersion := "2.11.4" ) lazy val root = (project in file(".")). settings(commonSettings: _*). settings( name := "hello", libraryDependencies += derby )
就是像這樣添加版本為 10.4.1.3 的 Apache Derby 庫作為依賴。
key libraryDependencies
包含兩個方面的復雜性:+=
方法而不是 :=
,第二個就是 %
方法。+=
方法是將新的值追加該 key 的舊值后面而不是替換它,這將在 更多設置 中介紹。%
方法是用來從字符串構造 Ivy 模塊 ID 的,將在 庫依賴 中介紹。