我們爲什麼放棄SBT迴歸Maven

推薦:博主歷時三年傾注大量心血創作的《大數據平臺架構與原型實現:數據中臺建設實戰》一書已由知名IT圖書品牌電子工業出版社博文視點出版發行,真誠推薦給每一位讀者!點擊《重磅推薦:建大數據平臺太難了!給我發個工程原型吧!》瞭解圖書詳情,掃碼進入京東手機購書頁面!

在這裏插入圖片描述

 

 

顯然,我是在說Scala項目。在我們討論這個話題時,SBT的穩定版本是0.13,我想再過幾年,本文提及的問題會一一得到解決,從而讓SBT成爲一個真正成熟強大的構建工具。

在我們目前開發的系統中,有一個基於AKKA的組件,使用Scala語言進行編程。絕大多數情況下,構建Scala項目首選的工具是SBT,作爲新一代的構建工具,SBT吸收了衆多前輩的優點,簡單易用,能夠滿足基本的應用場景。

但是SBT確實還不夠完善和強大,在實際的項目構建中,當面臨一些相對複雜的場景時,會顯得比較無力。其中最爲我們不能接受的是面向多環境的構建。儘管社區提出過一些解決方案,例如http://stackoverflow.com/questions/17193795/how-to-add-environment-profile-config-to-sbt , 但是這個方案的缺陷在於對於每一套環境都要提供全套的配置,即使它們在多數據環境中的值是一樣的。實際上這個問題的本質原因是SBT尚沒有類似Maven那樣在構建時基於某個配置文件對一些變量進行過濾和替換的Resource+Profile功能,這是很重要的一個需求。

就打包方面,我指的是構建一個包含命令行工具、配置文件和各種Lib的安裝包,SBT的sbt-native-packager確實非常強大,令人印象深刻。同樣,在面向不同環境的前提下,打包不同用途的package時,sbt-native-packager的靈活性還有待檢驗。例如,基於我們過去的最佳實踐,面向每一種環境,我們嚐嚐會利用maven-assembly-plugin構建兩種package,一種是包含全部產出物的標準部署包,一種是僅僅包含每次構建都有可能發生變化的文件,例如項目自身的jar包和一些配置文件,我們把這種包稱爲最小化的package,這種package會用於日常的持續集成的部署,它的體積很小,在網絡帶寬有限的環境裏,它會大大節約部署時間。在這方面,我不能確定sbt-native-packager能否完美實現,因爲在遇到前文提及的問題時我們已經放棄了對sbt-native-packager更深入的研究,這裏提出打包問題,也是在分享我們的最佳實踐。

回到Maven,我必須承認我是Maven的忠實擁躉,在過去數年的開發工作中,Maven滿足了我們各式各樣的構建需求,從沒有讓我們失望過,它的約定大於配置的思想和豐富的周邊插件真正實踐了:Make simple things simple, complex things possible!

即便如此,在我剛剛開始我的Scala編程之路時,我還是堅定地擁抱了SBT,社區基於Scala的開源項目也多是基於SBT構建的。但是當一個項目進入真正的開發流程時,SBT表現的還不夠強大,對比Maven上的種種最佳實踐,不由得讓我們迴歸Maven,但是這並不代表我們會在Maven上停滯不前,實際上我們對SBT抱有很大的期望,只是它需要時間變得更加強大。在未來某個合適的時機,我想我們會再次迴歸SBT。

本文原文出處: http://blog.csdn.net/bluishglc/article/details/57890873 轉載請註明出處。

推薦:博主歷時三年傾注大量心血創作的《大數據平臺架構與原型實現:數據中臺建設實戰》一書已由知名IT圖書品牌電子工業出版社博文視點出版發行,真誠推薦給每一位讀者!點擊《重磅推薦:建大數據平臺太難了!給我發個工程原型吧!》瞭解圖書詳情,掃碼進入京東手機購書頁面!

在這裏插入圖片描述

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章