一 sbt的使用html
SBT = (not so) Simple Build Tool,是scala的構建工具,與java的maven地位相同。其設計宗旨是讓簡單的項目能夠簡單的配置,而複雜的項目能夠複雜的配置。java
sbt使用了ivy,默認將依賴包保存在用戶目錄.ivy下面,若是以爲默認路徑不合適,能夠把sbt.boot.properties文件的[boot]和[ivy]目錄修改成指定目錄,好比ivy-home是cache依賴包路徑,打比方能夠改成/home/user/.../ivy-home/ 或者 F:\...\ivy-home\,而後指定路徑下生成的cache目錄將具體存儲sbt項目依賴包。
git
1 sbt項目目錄github
和maven同樣,sbt有約定了一個通用的目錄結構,使用約定的結構會使後面的工做簡單不少。項目配置能夠在build.sbt文件裏定義,也能夠在base/project/build.scala文件裏定義,通常狀況下build.sbt就已經足夠,除非多工程項目或者須要不少特殊定義的項目shell
base/ build.sbt //構建配置文件 /project //也是構建配置的一部分 build.scala //高級配置,可選 /src /main /scala /java /resources /test /scala /java /resources base表明項目的根目錄
2.sbt命令(若是mvn命令)express
sbt有哪些命令可用?輸入help命令查詢,即會列出一堆可用的命令,好比exit,reload等,不知道某個命令的做用?help 命令名,好比輸入help exit顯示exit命令的做用。api
列出的命令裏並無compile,test等經常使用的命令?由於那些不是sbt的命令而是當前工程的task. 輸入 tasks命令,就能夠看見 compile,test,package等等任務的說明了。瀏覽器
想查看項目的配置?用show命令,輸入show name,看當前項目的名字,輸入show libraryDependencies看當前項目依賴的庫,libraryDependencies太長記不住?輸入lib後按tab鍵! 交互窗口是有tab提示的!輸入help show,你能夠看到show命令的做用是顯示配置的值,若是show以後跟的是任務,則執行該任務並顯示任務執行的結果。 你能夠試試show compile看什麼結果,若是你不想執行compile,而是想看命令的說明,請用inspect命令,inspect命令比較複雜,執行後輸出的結果也比較複雜,具體這個命令的做用是什麼請help inspect, 不過得等理解了build definition的含義後才能看懂help說的是什麼。。。bash
經常使用的任務則有compile, test, run,package,doc等,請顧名思義或自行help之。另外這些任務經常還有些變種,好比package-doc,package-src等,用tasks命令查看任務的列表,必有一款適合您app
有一個強大的任務不得不特別拎出來講一下:console
輸入console回車,會在當前會話內啓動一個REPL,不要告訴我你不知道REPL是scala解釋器的意思。。。就是你在命令行下輸入scala回車後進入的那個交互界面。
強大的是,sbt會加載你的項目依賴的所有jar包和你本身的代碼! 你能夠在這個解釋器裏實驗你的半成品。 個人模板工程裏有一個sample/Account.scala文件,十幾行很簡單的代碼,你能夠看一下,而後在console窗口裏玩弄Account類和Account伴生對象. 不過別忘了先import sample._
由於依賴的jar包也都被加載了,因此對於那些你可能還不熟悉的第三方庫,你有能夠在console裏玩個痛快!這功能很給力,誰用誰知道。
順便在提一下,sbt命令有3種執行模式:
一、交互式,即上文所描述的
二、批處理式,即在命令行下輸入sbt 命令名來執行,好比sbt compile就會編譯代碼,而不進入交互模式
三、連綿不絕式,在命令名前加上~號,即會進入連綿不絕模式,好比~compile,會編譯當前代碼,而後監聽代碼改變,每當你編輯了代碼並保存後,sbt就會自動編譯代碼,~test也同樣,當你修改代碼後自動編譯並運行單元測試。按回車鍵可退出此模式。
你前面應該試過show name和show libraryDependencies了吧?show出來的結果就是來自你的build.sbt文件,也就是build definition了。打開build.sbt就能夠看到name := 「sbt11template」 還有其餘的一堆xxx := xxxx,很顯然的,這就是個key-value pair, sbt就是讀取配置文件並構建一個key-value的map. 可是在build.sbt裏面並不是key := value, 而是key := expression. 文件裏的每一行實際上是一句scala語句,不行你能夠試試把
name := 「sbt11template」 改爲
name := {「sbt11template」.toUpperCase}
而後reload, 再show name,你會看到變成大寫的SBT11TEMPLATE
:=是最經常使用的方法,其做用就是將key設置成expression的值,相同的key若是被屢次賦值,則後面的值會覆蓋掉前面的值。適用於簡單類型的key,好比name,version等。
其餘的經常使用方法有
+=,將值添加進現有值裏,適用於集合類型的key,好比libraryDependencies
++=,將一個集合值加入當前集合裏
~= ,這個牛X,你在~=後面寫個函數,~=將key的當前值傳給你的函數,而後將函數結果做爲新值,好比你能夠在name := xxx後面再來一句
name ~= { _. toUpperCase },同樣是把name變成大寫
<<= 將另外一個key的值賦給當前key,好比auther <<= name ,這個方法還有個高級用法,你能夠組合多個其餘key的值,賦給當前key,用文檔裏的例子
name <<= (name, organization, version) { (n, o, v) => "project " + n + " from " + o + " version " + v }
還有適用於集合類型的版本
<+= 和 <++=
這些語法的官方文檔在此
https://github.com/harrah/xsbt/wiki/Getting-Started-More-About-Settings
4.
對於不打算經過官方repository管理的第三方庫,在項目目錄下建個lib目錄,把jar包扔進去就好了。
但願sbt待爲管理的則在build.sbt裏用下面的語法加入
libraryDependencies += groupID % artifactID % revision % configuration
% configuration是可選的,表示某依賴庫只在特定配置中須要,好比模板項目裏的」org.specs2」 %% 「specs2」 % 「1.7.1」 % 「test」 是單元測試框架,只在測試時須要。
若是你視力好,會看到其中有個 %%,而不是一個%,這表示要求sbt尋找用當前你配置的scala版本編譯出來的jar包,這是由於scala不一樣版本編譯出來的結果會不兼容(悲劇),但願之後scala社區會解決這不兼容的問題。。。
對於依賴的java語言寫的庫的jar包,就沒這問題了,好比libraryDependencies += 「org.slf4j」 % 「slf4j-api」 % 「1.6.4」 就不須要%%了
配置好依賴後,運行sbt update,sbt會自動到maven庫和scala官方庫裏去找這些jar包並下載到你的用戶目錄的.ivy2目錄裏面,若是你不一樣的項目用了相同的庫,則sbt下載一次就夠了。
若是你但願sbt從你本身配置的repository裏下載,使用這個語法:
resolvers += name at location
好比
resolvers += "Scala-Tools Maven2 Snapshots Repository" at "http://scala-tools.org/repo-snapshots"
全部的一切都是經過key類配置的,key 的列表在http://harrah.github.com/xsbt/latest/sxr/Keys.scala.html
二 play的使用
1 .sbt的下載安裝(略)
2. paly framework的安裝
其實根本不用安裝,建項目也只是直接從對應的模板開始
若是idea是Ultimate收費版的,什麼都不用作,能夠直接建play2項目
若是是社區版,那就沒辦法了,只能用導入的方式
(1)建立項目,依賴與g8模板
sbt new playframework/play-java-seed.g8
sbt new playframework/play-scala-seed.g8
(2)如今能夠輸入 項目名、組織名、Scala 版本、Play 版本、SBT 版本:
(3)試着運行這個項目, sbt run直接運行
或者sbt進入命令行環境,再輸入run
(4)idea import這個項目,利用build sbt導入
(5)等待sbt相關依賴加載完成
(6)sbt shell 中運行sbt run 或者sbt console中運行 sbt run
便可用瀏覽器打開http://localhost:9090 看到welcome to play
(7)編譯命令用compile,測試命令用test