在使用 Gradle 的時候你有哪些心得?


提倡「一切皆為代碼」是從Rails開始的吧,Gradle的出現使得Java社區也可以使用動態語言編寫構建腳本,只要想想build.xml裡面的邏輯分支有多麼彆扭,就可以感受到Gradle帶來的快感了。

美中不足是Gradle速度比較慢:

  1. 啟動時間較長,可能是基於JVM和Groovy的原因吧,從敲下命令到真正開始執行需要等待幾秒鐘的時間

  2. Gradle二進位包的體積不小,如果使用Gradle Wrapper,自動下載二進位包的時間需要以分鐘計算(畢竟伺服器在國外),不過還好,這個過程只會出現一次

至於實踐,我一般會注意這幾點:

  1. 使用Gradle Wrapper

    1. 可以使得項目組成員不必預先安裝好gradle
    2. 便於統一項目所使用的gradle版本

  2. 保持構建腳本簡潔、清晰(因為這正是使用gradle替代ant、maven的首要理由)

    1. 屬性、常量(如版本號)放到gradle.properties文件中

    2. 模塊化構建腳本,通過plugin機制在多個項目中重用 Writing Custom Plugins

Grails、Spring Framework、Hibernate等著名的框架都在使用Gradle,可以參考他們的使用方法,當然還有Gradle本身。


  • 把項目拆分成子項目,定義共同的行為和單獨的行為,減少重複代碼

  • 使用Gradle Wrapper來統一版本、方便其他成員不用下載
  • Gradletask wrapper(type: Wrapper) {
    gradleVersion = "1.7"
    }

    然後執行這個任務:

    $ gradle wrapper
    :wrapper


Gradle功能確實很強大,最近一周都在弄項目的打包腳本,之前我是用ant寫的,現在項目全面轉去AS要把打包腳本轉用Gradle去寫,前期用了挺長時間去看Gradle的官方文檔Gradle User Guide,Gradle Plugin User Guide 中文版,Gradle User Guide 中文版。剛開始對Gradle的語法挺困惑的,熟悉之後就會好很多,功能確實非常強大。

不過在用Gradle寫打包腳本還是給一些奇奇怪怪的問題搞到頭都大了,簡直就是給虐死了,幸好問題都能一一解決,網上的資料還是少了點,浪費不少時間。Gradle是基於Java開發的,可以內嵌Java代碼和Ant代碼,簡直牛逼壞了。如果使用Gradle的API有問題,可以換一種實現思路改用Java來實現,比如我遇到使用Gradle的Exec來調用cmd命令竟然不能放在一個Task的doLast內,那麼需要調用cmd命令的task不能夠給別的Task依賴運行了,當時就罵娘了,這簡直就是反人類,最後使用Java的Runtime的exec來實現了


使用阿里雲來加速gradle jar/aar插件下載。配置方法:

cat ~/.gradle/init.gradle

gradle.projectsLoaded {
rootProject.allprojects {
buildscript {
repositories {
def REPOSITORY_URL = "Index of /repositories/jcenter"
all { ArtifactRepository repo -&>
if (repo instanceof MavenArtifactRepository) {
def url = repo.url.toString()
if (url.startsWith("Central Repository:")
|| url.startsWith("https://jcenter.bintray.com/")) {
project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL."
println("buildscript ${repo.url} replaced by $REPOSITORY_URL.")
remove repo
}
}
}
jcenter {
url REPOSITORY_URL
}
}
}
repositories {
def REPOSITORY_URL = "Index of /repositories/jcenter"
all { ArtifactRepository repo -&>
if (repo instanceof MavenArtifactRepository) {
def url = repo.url.toString()
if (url.startsWith("Central Repository:")
|| url.startsWith("https://jcenter.bintray.com/")) {
project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL."
println("allprojects ${repo.url} replaced by $REPOSITORY_URL.")
remove repo
}
}
}
jcenter {
url REPOSITORY_URL
}
}
}
}


我用gradle的時間也比較長了,個人認為它還是個很好的東西 ,主要是很靈活 可以看下這篇文章 gradle入門與在android中的使用


Gradle的優點是簡潔,靈活。缺點嘛,和早期的Maven一樣,IDE支持比較差,即使是IntelliJ IDEA 13.1,實際用起來也是一頭包。


Zane96/EasyLineCounter

一個統計代碼行數的gradle插件


最近剛用, 感覺當有問題了, 在網上找的東西不見得不能解決問題。 我是通過學groovy, 再加上各種嘗試做成功的。 所以我的心得就是: 再學下groovy, 簡單的一些功能和特性就行。 當然如果以前學過ruby, groovy入門好快的, 估計不要一星期。

另外,感覺打包好慢。我們項目以前用ant, 43秒打完。 現在gradle,要花3分半鐘, 慢了好多


還未研究,據說是個好東西。

hibernate 好像已經使用它。


推薦閱讀:

為什麼你的應用應該崩潰?

TAG:軟體開發 | Gradle |