原文地址:http://rominirani.com/2014/07/28/gradle-tutorial-part-1-installation-setup/
在這篇教程里,我們將主要講解如何在我們自己的系統上安裝、配置、原始版本的Gradle,並學習一些基本的Gradle命令行!Android Studio 本身集成了一個內部版本的Gradle,在安裝Android Studio的時候,就自動給安裝上了,這對於我們這樣的小白對Gradle的理解沒有幫助意義,所以我們單獨將Gradle原始版本安裝並配置獨立出來便於我們的理解Android Studio里面的Gradle。
在開始之前,如果你想知道為什么Gradle對於編譯來說是一個好工具,我建議你讀一下這篇文章,雖然你不讀也能讀懂下面的內容,但是讀一下或許能幫助打開你的思想,讓你理解為什么很多公司和開發人員都在研究並應用Gradle!
下面的系列步驟將教你如何在你自己的電腦上配置Gradle!Gradle需要JDK,所以我假設你就是一個java開發者,並知道如何在你電腦上安裝 JAVA JDK!
下載Gradle
在寫作的時候,Gradle 已經發布到2.0,可以在這里下載。
先下載那個gradle-2.0-all.zip文件到你的電腦上,並解壓,我將其解壓到我的電腦的D:\Program Files\gradle-2.0-all。解壓后有這些文件
你可能會問:為什么要安裝一個原始版本的Gradle?Android Studio 本身只是簡單的集成Gradle,當你使用Android Studio 在創建APP的時候,Android Studio 會調用Gradle的命令來做一些事情,而Android Studio 是如何在做這些事情的呢?如果你安裝這個單獨版本的Gradle,並使用其命令行來完成,你就很容易的知道Android Studio 在如何做了,否則的話,你會誤以為Android Studio如何使用Gradle就是在玩魔術。
設置環境變量
\bin 文件夾包含了gradle腳本文件(unix和windows 都有),如果你要使用這個腳本,你就需要如下步驟:
1. 創建一個環境變量 GRADLE_HOME,並指向你的Grdle的安裝路徑,在我的電腦,這樣添加:
2. 添加 %GRADLE_HOME%\bin 到你的PATH 環境變量,這樣你就可以在CMD中任意使用gradle命令行了!
檢查配置
為了檢查剛才所設置的變量是否成功,你打開CMD,並執行如下命令:
gradle –v
如果配置成功就會有如下結果:
如果你沒有看到這樣的內容,那就檢查一下路徑是否正確。
關於Groovy
只要有Gradle就應該有Groovy,離開Groovy討論Gradle是不完整的!Groovy是一個在JVM上非常流行並且強大的語言。
Gradle使用最受歡迎的特點有:
簡潔
靈活
可以照你想象的方式自由配置
Groovy在實現上面的這些特性時扮演了非常重要的角色,基本就是Groovy提供這些功能的實現。Ant與Maven在編譯時使用XML文件,而Groovy語言比XML文件要靈活強大很多,因為它不僅讓文件在內容上看起來更加簡潔,並且它提供修改或者制定標簽的強大的可編程能力,也支持閉包等最新編程語言才具有的高級特性,並且可以實時編譯!
那么問題就來了,你可能就會問:我需要去學習Groovy嗎?
我試着回答你,不需要!除非你真的需要不按照約定去做一些你自己需要的需求,那么你可能就需要去學習Groovy,因為Gradle的彈性與靈活性就表現在這里,你可以照你想的方式來做一切。但是對於大多數情況,你只需要使用各種build.gradle模板(包含了 Groovy DSL),根本就不需要學習Groovy!
所以,要理解Gradle不需要你去好好的學習Groovy,當然如果你想理解Groovy的全部強大功能,你也可以自己去學習。這肯定會是有好處的!
Groovy在默認安裝Gradle的時候,就已經安裝了一個內部版本了,所以你不需要再去下一個獨立版本的Groovy!
基本Gradle命令
我們還沒有寫任何源代碼或者編譯文件(Gradle),所以一會我們就來寫。現在先來試試下面這個命令行:
gradle -q help
這個命令用來展示Gradle的幫助信息
-q:用來表示dos窗口中退出信息 ,這個命令在你只需要看一些輸出的時候非常有用
gradle –q tesks
這個展示一個你當前可以使用的任務列表
gradle properties
這個將展示一個屬性列表,這些屬性gradle已經預定配置好的,你也可以修改大多數的實行在你自己的編譯文件里。這些屬性給你一個暗示:Gradle在執行你的任務之前為你的項目配置會做一大堆非常繁重的工作!
我們還沒有編譯自己的JAVA項目,這個會在以后的系列來做,我們先要理解Groovy是如何給Gradle提供了那一整套強大的編程能力!
我們先討論一下build.gradle文件。這個標准的文件名就是我們自己的編譯文件。這個文件包含了所有你需要Gradle去執行的命令。在完成了整個教程系列之后,我們就能夠非常有效的去使用這個文件去創建或者使用各種順序的插件、任務來完成我們自己的編譯、測試、運行java程序的工作!
現在,你來跟着我做:
選擇一個文件夾,在里面創建一個文件build.gradle
用記事本或者其他編輯器,將下面的內容添加的build.gradle文件里
task compileTask << {
System.out.println “compiling…”
}
現在打開CMD,並定位到你所創建的文件夾(使用 cd命令,你應該會吧),執行下面的代碼
gradle –q tasks
這個就會輸出一個可用的各種任務(tasks)列表,並且你會注意到在輸出部分,與標准任務分開的,會有一個我們自己的創建的那個任務 compileTask:
我們的編譯文件(build.gradle)就是一些列的任務(task)的組合,這里就帶出了第一個的概念任務(task),任務指定了gradle編譯系統要為我們執行的代碼。
當前我們所指定的項目被稱作compileTask,就如你所看到的,我們使用了Groovy代碼來定義這個任務,這個任務所要做的事情,就是簡單的執行一個 System.out.println。怎么樣,現在能體會Groovy是如何強大了吧!
現在,我們要如何使用命令執行這個compileTask呢?
在做這個之前,我們還有一個知識點需要理解。當我們執行一個 gradle命令時,gradle編譯系統就會在當前目錄尋找文件名為build.gradle的文件。如果找到了,就使用這個文件。在我們上面的例子中,gradle編譯系統找到了這個文件,所以gradle編譯系統就將決定這個文件里是什么樣的任務,並將其任務加到gradle編譯系統的可執行任務里表里面去。
那么,我們執行即不帶任何參數的gradle的命令,也不指定任何要被執行的任務時,會發生什么呢?現在試試,執行吧:
gradle
你應該會看到如下的輸出:
這個輸出很明顯的告訴你,當你執行gradle的時候,你需要指定一個任務名。比如:gradle <task>。那么就讓我們就試試使用我們自己的任務會是什么效果:
gradle –q compileTask
就有一個輸出消息
現在讓我們增加build.gradle文件一些其他的任務,比如:
task compileTask << {
System.out.println “compiling…”
}
task buildTask <<{
System.out.println “building…”
}
現在執行下面的命令:
gradle –q tasks
你應該會看到兩個列表都在otherTasks里面:
現在你就可以執行
gradle compileTask
或者
gradle buildTask
那么如果我們想創建一個默認被執行的任務,可以讓我不需要制定任務名要如何做呢?
要做到上面的需求,修改build.gradle文件
defaultTasks 'buildTask'
task complieTask << {
System.out.println "compling..."
}
task buildTask <<{
System.out.println "building..."
}
現在,如果我們簡單的執行gradle -q,就會有如下輸出:
最后一部分要討論的,就是任務之間的相互依賴。這個問題是這樣的情況:如果buildTask執行了,那么compileTask一定要在buildTask之前執行,這樣就是說buildTask依賴於compileTask。要如此做,我們需要修改build.gradle文件如下:
defaultTasks 'buildTask'
task compileTask << {
System.out.println "compling..."
}
task buildTask(dependsOn:compileTask) <<{
System.out.println "building..."
}
你再次執行gradle -q,就應該有如下輸出:
我們這篇文章里所討論的gradle只有一些非常基本的功能。把你的編譯文件想象成一些列的需要被執行的任務。如果你是一個java程序猿,並且對編譯處理有一些經驗(ant,Maven),那么你應該知道,要編譯任務東西,我們都要做編譯,構建,跑測試用例,打包等等等等,但是在Gradle里面通通沒有這些了,只有各種任務。
通過使用的Gradle規定的約定和插件程序,我們並不需要手動去寫任何任務。就能夠自己定義一些列的步驟來構建文明之間的項目!
目前有的一些插件程序有 java plugin ,war plugin,appengine plugin, android plugin等等,那些已經定義一些列你可以使用的任務,我們也將在接下來的課程里看到更多!保持進步哦……