1. 程式人生 > >【gradle】從零開始學習

【gradle】從零開始學習

1.  認識

           ★ 簡單來說就是一款構建工具。其他構件工具 如 Maven ,Ant.

           ★ gradle 的特色:

                    ① : 宣告式的構建和基於約定的構建 : gradle 的 核心是基於 Groovy 的可擴充套件的特定領域語言 (DSL:Domain Specific Language)

                          ② : 基於程式設計的依賴語言

                          ③ : 結構化的構建

                          ④ : Multi-project builds

                          ⑤ : Gradle is the first build integration tool

                          ⑥ : Groovy

2. 安裝

             ★ 首先應保證已經安裝 jdk 6 或者以上的版本。

             ★ gradel 直接下載不需要安裝 ,需要配置環境變數 GRADLE_HOME ,並加入到 PATH 環境變數中去。通過 gradle -v 來驗證是否配置成功

             *: 當然可以不用安裝gradle  , 可以使用 gradle wrapper 管理 gradle, 下面會有介紹

3.   idea(2016.1 ) 建立 gradle 專案流程   (idea 支援 Gradle SDK 1.2 及以後的版本)

             ①  File → new → project → 會出現一個 New Project 的彈出框

             ② 左側選擇 Gradle → 配置 project SDK(java) 路徑  → 選擇 apply plugin (選擇 java 會整合java 外掛 ,選擇 web 會整合 ‘war’ 外掛) → 點選next

             ③ 設定專案的 GroupId、ArtifactId 、 Version → 點選 next

             ④ 選擇建立空的目錄(會自動建立 java,resource,webapp目錄),這裡是設定 gradle 的一些細節  → 點選 next

             ⑤ 顯示專案名稱、專案地址等 → 點選 finish

            關於 idea 的 Gradle Tool Window  (通過 view → ToolWindows → Gradle 開啟,如果不存在Gradle 則需要關閉專案重新匯入專案) 參看 : idea 說明文件:

                     將 Gradle tasks ,以及 build.gradle 中所做的所有改變全部展示在此 ,每次在 build.gradle 中做完修改需要點選同步按鈕進行同步

4. 構建指令碼基礎

          4.1  gradle 中圍繞兩個基本概念    :

                         ①  projects   ( 專案 )    :  每個 gradle 的構建 由一個或者多個 project 組成 ,

                         ②  tasks  (任務)     :   每個 project 由一個或者多個 task 組成。

         4.2  hello world

                gradle 執行  task  的命令列語法如下 :

gradle [task]   //使用本地安裝的 gradle 執行 task
gradlew [task]  // 使用 Wrapper 下載的 gradle 執行task  ,使用 gradle Wrapper 方便 gradle 的版本管理 ,需要使用的時候執行命令就可以下載,不需要配置
 

                 ★完整形式

build.gradle

task hello {
       doLast {      //doLast 為關鍵詞
               println 'Hello world!'
       }
}
cmd 中執行
gradle -q hello    //-q 相當於靜默執行

                 ★簡寫形式
task hi << {
println 'Hi!'
}

               檢視 專案中 所有可執行的 task :

gradle -q tasks      //-q 靜默執行
gradle -q tasks  --all
             

               檢視專案的依賴 :

gradle -q dependencies    //檢視 root project 的依賴
gradle -q dependencies module:dependencies   //檢視 root project 和子專案 module 的依賴
           4.3 構建指令碼即程式碼  (基於 Groovy 程式碼,Groovy 和 java 很相似 ,只是 Groovy 比 java 寫法 更簡單)

           4.4  task 之間的依賴   (  dependsOn:  )

task hi << {
    println 'hi'
}
task intr(dependsOn: hi) << {
    println 'i`m xlchen'
}


             4.8  Project  API

                           ★ 標準的  project properties

i.e :

build.gradle

println name        //專案名稱
println path         //專案絕對路徑
println project.name    //專案名稱

cmd 中

gradle -q check //輸出上面的幾個屬性

             4.10 宣告變數   :兩種方式

                          ① Local variables   : def 關鍵字定義  ,是 groovy 語言中的一個特色

def dest = "dest"

                          ② extra properties :可以用來集中定義jar 包版本
ext {
    springVersion = "3.1.0.release"
    email = "[email protected]"
}

task exttest << {
    println springVersion
    println email
}

5. 基於已有的指令碼 執行

         5.1 task

                  ★ 執行多個任務  : 每個任務最多執行一次 :無論是命令列中指定多個,還是很強的依賴

gradle compile test  //按順序執行compile 任務 和 test 任務

                  ★ 不執行某個任務 : -x  或者  --exclude-task  [taskName]
gradle dist -x test //不執行test 任務

          5.2  The Gradle Wrapper   

                    ★ :  可以不用預先安裝好 gradle , 便於統一 gradle 版本 ,前提是要整合 gradle wrapper ,由以下幾部分組成

                                · gradlew  (Unix shell 指令碼)

                                · gradlew.bat  (windows 批處理檔案)

                                · gradle / wrapper / gradle-wrapper.jar  (wrapper jar)

                                ·gradle / wrapper / gradle-wrapper.properties   (wrapper properties)  : 這裡記錄了專案中使用到的gradle 的版本

                    ★ : 如果專案中已經設定了 wrapper  ,可以執行以下命令下載 gradle  ,下載的版本記錄在 gradle-wrapper.properties 中

                            ①windows

gradlew <task>    

如:
gradlew idea   //前提是已經集成了 idea 外掛   apply plugin 'idea'
                           ② linux / Mac
./gradlew <task>

                    ★ : 修改 gradle 的版本命令

gradle wrapper --gradle-version <version>

i.e  :  gradle wrapper --gradle-version 2.1

                              當然也可以在 build.gradle 配置檔案中配置task
task wrapper(type: Wrapper){
     gradleVersion = '2.0'
}

6 .建立 JVM 專案

                      引用方式 :

apply plugin:'java'


                      作用 :

                                   Source sets   的概念  :一起編譯並且執行的一組資原始檔  ,定義了兩種標準的 source sets  :  main  ,  test;

println sourceSets.main.output.classesDir
println sourceSets['main'].output.classesDir     //兩個都是輸出 java 檔案編譯後所存放的檔案目錄

sourceSets.main.output.classesDir = file("bin") //修改輸出目錄  ,file 為 gradle 的建立檔案的 API

編碼的設定
compileJava.options.encoding = 'UTF-8'
compileTestJava.options.encoding = 'UTF-8'


                                   project layouts   : 如 java 檔案目錄結構  一般是  src/main/java    src/main/test/java 等等 ; 

Directory		Meaning
src/main/java		Production Java source
src/main/resources		Production resources
src/test/java		Test Java source
src/test/resources		Test resources
src/sourceSet/java		Java source for the given source set
src/sourceSet/resources		Resources for the given source set


                                   task   :  提供一些 task  ;

        eg :

gradle build     //會編譯並測試 程式碼最後建立 jar 包
gradle clean     //清空
gradle check     //編譯並測試

                            各種  task 之間關係如下圖:


                  ★ jar 包依賴管理

                                 增加 Maven 倉庫   :  一個公共的 Maven 倉庫

repositories {
       mavenCentral()  // maven 的倉庫中心
}
或者
repositorise {
       jcenter()    // Bintray 的  Jcenter 庫
}
或者其他的遠端倉庫
repositories{
     maven {
            url "http://repo.mycompany.com/maven2"
      }
}
或者本地倉庫

                                 新增依賴

                    方式 ①

dependencies {
      compile group: 'commons-collections', name: 'commons-collections', version: '3.2.2'
      testCompile group: 'junit', name: 'junit', version: '4.+'
}

                      方式②
ext {
    springVersion = '4.2.2.RELEASE'
}

dependencies {
    compile(
            'org.springframework:spring-webmvc:' + springVersion,
            'org.apache.commons:commons-lang3:3.4',
    )
}

                  注意 : ★  providedCompile  只有 在 提供了外掛 apply plugin : 'war' 時 才可以使用。