{eval=Array;=+count(Array);}
我們公司有幾個項目用過gradle,但大部分還是用maven,而且以后估計還會用maven,為什么呢?就是因為gradle的殺手锏:腳本太強大了。
早期的構建都是腳本化的,用sh或者bat來組合編譯,打包,部署等過程,后來進化到xml描述的ant工具,但還是可以寫很多自定義的任務,調用本地命令打包,各種任務組合,跟bat差不多,它們的共同特點就是:靈活!可以指定自己的依賴路徑,個性化打包過程。直到后來,maven出現(xiàn)了,只能通過不同的archtype來構建不同的項目,而每種項目類型的項目工程目錄是固定的,如果沒有問題,一個package命令就可以了,不再有個性化的配置(自己寫mojo例外),約定優(yōu)于配置是它的哲學!而且,你只要理解pom.xml基本配置即可。
gradle結合了maven的優(yōu)點,同時又保留了腳本調用的特點,很多時候給人太多選擇和機會,反而會將項目(特別是大型項目)的構建配置復雜化。導致新人很難掌握,其dsl語法是簡化略的groovy調用,有時候不了解groovy語言及其語法,很難理解和寫出好的構建腳本,學習成本高。
第一到底是不是gradle比maven少,這個問題我沒看過數(shù)據(jù)不知道實際情況。但是從歷史角度和目前現(xiàn)狀來看maven日常接觸的是要多一些,畢竟技術這玩意就是一工具,用的熟練順手就好,沒必要一味求新。個人淺見
用的多和少是量級上的。 gradle后于maven出現(xiàn),顯然是挑戰(zhàn)者身份的。大多老項目是否愿意替換成gradle阻力很大。 所以量上看不那么能說明問題。
目前新項目是否一定選擇gradle?相信大家都沒定論??梢奼radle作為繼任者的確沒有那么流行。 究其原因,可能有2點
1,配置表示語言問題。 項目表示類工具是一定要和項目解耦,因此注定了是個靜態(tài)配置。 maven用的老牌xml表示語言,雖然啰嗦,但是沒什么違和感,很容易理解。 反觀gradle為了簡潔,失去了表示直觀性。
2,配置隔離原則。gradle用靈活腳本能力,不但增加理解維護成本,還打破了配置和實現(xiàn)的邊界。配置是黑盒子,隔離理解成本的,不應該提供任何執(zhí)行和互操作能力。
這個是gradle的不好的地方,而減少構建時間已經(jīng)不是關鍵改進了。另外一個反例是sbt,用過的人相信都是一言難盡。
我司有個項目用kotlin和java混寫的,gradle編譯,我從win換到mac,還是一直報gradle問題,最后我直接離職了。
gradle現(xiàn)在是android studio的標配構建框架怎么說用得少呢?
android開發(fā)者目前烏泱烏泱一大片,而不會使用gradle基本沒法玩了,所以用的人很多的。
maven的使用者,主要還是是以前老的web開發(fā)者,雖然gradle強大得多,但由于學習成本的關系(gradle學習并不輕松),很多人還在堅持。
Gradle 使用真的比 Maven 的人要少嗎?
Github 文件名搜索的參數(shù)數(shù)據(jù):
圖1:是在 GitHub 中搜索 build.gradle 文件名的匹配數(shù)量有 970 萬
圖2:是在 GitHub 中搜索 pom.xml 文件名的匹配數(shù)量有 930 萬
當然這一組數(shù)據(jù)僅僅只能作為參考,并不完全準確,不過我們也能從中看出使用 Gradle 的人并不少,相反很多。
可能是題主身邊使用的比較少,造成這種原因可能主要原因有兩點。
相反對于熟悉 Gradle 的人來說,他們會更習慣 Gradle 的工作方式,因為在配置上它比 Maven 要簡潔。配置比 Maven 簡潔這并不是 Gradle 最大的優(yōu)勢,而是 Automate Everything(自動化一切) 實現(xiàn)上要比 Maven 容易的多,這才是我真正喜歡 Gradle 的理由。
比如:
根據(jù)環(huán)境自動化配置,因為 *.gradle 文件其實就是 groovy 所以可以在構建腳本中直接就是使用 groovy 編碼。不僅支持條件語句,還直接使用 java、groovy 的 API,比如 System.getenv 獲取系統(tǒng)環(huán)境變量然后根據(jù)值做一些操作就比 Maven 要容易很多。
repositories {
mavenLocal()
def aliyunEnabled = System.getenv("GITHUB_ACTIONS") == null
if (aliyunEnabled) {
maven {
url = "https://maven.aliyun.com/nexus/content/groups/public/"
}
}
mavenCentral()
}
在國內訪問 Maven 的中央倉庫下載依賴效率不高,所以采用 Aliyun 提供的鏡像倉庫速度會快得多,但本人一直喜歡白漂 ???? 使用免費的 GITHUB_ACTIONS,在 GITHUB_ACTIONS 構建時訪問ucloud云鏡像速度很慢,所以就有了上一段邏輯。如果你使用 Maven 的話可能需要使用 profile 來區(qū)分,在構建命令上加上 profile 相關的參數(shù),或者使用 settings.xml 的方式去配置鏡像,但是多人協(xié)作時每個人都需要配置。而在使用 Gradle 時就可以輕易的做到一次配置到處運行,不需要額外配置,不需要額外命令參數(shù)實現(xiàn)這一自動化構建。
更多的就不在舉例了,選擇一項工具,可能是客觀的原因,也可能是主觀原因。當然我覺得更多的是在你身邊,團隊有人帶頭去做這個事情。
同時也期望更多的人能使用 Gradle 來簡化你的工作,讓工作變得更加輕松,Automate Everything。
gradle大型項目配置比較好一點,簡潔;
maven 相對來說比較冗余,但gradle還是基于maven 的,沒有多大的改變。習慣問題。
0
回答0
回答10
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答