做者:EZLippi 連接:http://www.zhihu.com/question/29338218/answer/51293828 來源:知乎 著做權歸做者全部,轉載請聯繫做者得到受權。android
Gradle和Maven都是項目自動構建工具,編譯源代碼只是整個過程的一個方面,更重要的是,你要把你的軟件發佈到生產環境中來產生商業價值,因此,你要運行測試,構建分佈、分析代碼質量、甚至爲不一樣目標環境提供不一樣版本,而後部署。整個過程進行自動化操做是頗有必要的。 整個過程能夠分紅如下幾個步驟: 編譯源代碼 運行單元測試和集成測試 執行靜態代碼分析、生成分析報告 建立發佈版本 部署到目標環境 部署傳遞過程 執行冒煙測試和自動功能測試 若是你手工去執行每個步驟無疑效率比較低並且容易出錯,有了自動化構建你只須要自定義你的構建邏輯,剩下的事情交給工具去完成。spring
雖然二者都是項目工具,可是maven如今已是行業標準,Gradle是後起之秀,不少人對他的瞭解都是從android studio中獲得的,Gradle拋棄了Maven的基於XML的繁瑣配置,衆所周知XML的閱讀體驗比較差,對於機器來講雖然容易識別,但畢竟是由人去維護的。取而代之的是Gradle採用了領域特定語言Groovy的配置,大大簡化了構建代碼的行數,好比在Maven中你要引入一個依賴:maven
<properties> <kaptcha.version>2.3</kaptcha.version> </properties> <dependencies> <dependency> <groupId>com.google.code.kaptcha</groupId> <artifactId>kaptcha</artifactId> <version>${kaptcha.version}</version> <classifier>jdk15</classifier> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> </dependencies>
而後我將其轉換成Gradle腳本,結果是驚人的:工具
dependencies { compile('org.springframework:spring-core:2.5.6') compile('org.springframework:spring-beans:2.5.6') compile('org.springframework:spring-context:2.5.6') compile('com.google.code.kaptcha:kaptcha:2.3:jdk15') testCompile('junit:junit:4.7') }
注意配置從原來的28行縮減至7行!這還不算我省略的一些父POM配置。依賴的groupId、artifactId、 version,scope甚至是classfier,一點都很多。較之於Maven或者Ant的XML配置腳本,Gradle使用的Grovvy腳本殺傷力太大了,愛漂亮之心,人皆有之,相比於七旬老婦鬆鬆垮垮的皺紋,你們確定都喜歡少女緊緻的臉蛋,XML就是那老婦的皺紋。單元測試
Gradle給我最大的有點是兩點。其一是簡潔,基於Groovy的緊湊腳本實在讓人愛不釋手,在表述意圖方面也沒有什麼不清晰的地方。其二是靈活,各類在Maven中難如下手的事情,在Gradle就是小菜一碟,好比修改現有的構建生命週期,幾行配置就完成了,一樣的事情,在Maven中你必須編寫一個插件,那對於一個剛入門的用戶來講,沒個一兩天幾乎是不可能完成的任務。測試