Gradle學習第一篇

 

說明

這是一個基於 JVM 的富有突破性構建工具。

它爲您提供了:

  • 一個像 ant 一樣,通用的靈活的構建工具
  • 一種可切換的,像 maven 一樣的基於約定約定優於配置的構建框架
  • 強大的多工程構建支持
  • 強大的依賴管理(基於 ApacheIvy)
  • 對已有的 maven 和 ivy 倉庫的全面支持
  • 支持傳遞性依賴管理,而不需要遠程倉庫或者 pom.xml 或者 ivy 配置文件
  • ant 式的任務和構建是 gradle 的第一公民
  • 基於 groovy,其 build 腳本使用 groovy dsl 編寫
  • 具有廣泛的領域模型支持你的構建

   安裝

   官網下載地址

  先決條件

  Gradle在所有主要操作系統上運行,只需要安裝Java JDK或JRE 7或更高版本。要檢查,請運行java -version

 環境變量配置

運行 gradle 必須將 GRADLE_HOME/bin 加入到你的 PATH 環境變量中

 測試安裝

運行如下命令來檢查是否安裝成功.該命令會顯示當前的 JVM 版本和 Gradle 版本。

gradle -v 

 JVM參數配置

Gradle 運行時的 JVM 參數可以通過 GRADLE_OPTS 或 JAVA_OPTS 來設置.這些參數將會同時生效。 JAVA_OPTS 設置的參數將會同其它 JAVA 應用共享,一個典型的例子是可以在 JAVA_OPTS 中設置代理和 GRADLE_OPTS 設置內存參數。同時這些參數也可以在 gradle 或者 gradlew 腳本文件的開頭進行設置

HelloWord

Gradle中的所有內容都基於兩個基本概念:Projectstasks.

每個Gradle構建都由一個或多個項目組成。項目代表什麼取決於您使用Gradle做什麼。例如,項目可能表示庫JAR或Web應用程序。它可能代表由其他項目生成的JAR組裝的分發ZIP。項目不一定代表要構建的東西。它可能代表着要做的事情,例如將應用程序部署到登臺或生產環境。如果現在看起來有點模糊,請不要擔心。Gradle的逐個構建支持爲項目的內容添加了更具體的定義。每個項目由一個或多個任務組成。任務代表構建執行的一些原子工作。這可能是編譯某些類,創建JAR,生成Javadoc或將一些存檔發佈到存儲庫。

 

使用gradle命令運行Gradle構建。gradle命令查找build.gradle當前目錄中調用的文件。我們稱這個build.gradle文件爲構建腳本,但嚴格來說它是一個構建配置腳本。

創建以下名爲的構建腳本build.gradle

task hello {
    doLast {
        println 'Hello world!'
    }
}

在命令行shell中,移動到包含目錄並使用以下命令執行構建腳本gradle -q hello

 

//--------------------
// 任務依賴
//命令 gradle -q intro
//輸出 Hello world!
//      I'm Gradle
//--------------------

task hello {
    doLast {
        println 'Hello world!'
    }
}
task intro {
    dependsOn hello
    doLast {
        println "I'm Gradle"
    }
}





//--------------------
// 任務依賴-依賴任務在執行任務之後聲明
//命令 gradle -q taskX
//輸出 taskY
//     taskX
//--------------------

task taskX {
    dependsOn 'taskY'
    doLast {
        println 'taskX'
    }
}
task taskY {
    doLast {
        println 'taskY'
    }
}




//--------------------
// 動態任務
//命令 gradle -q task1
//輸出 I'm task number 1
//--------------------

4.times { counter ->
    task "task$counter" {
        doLast {
            println "I'm task number $counter"
        }
    }
}




//--------------------
// 操作現有任務-創建任務後,可以通過API訪問它們。可以使用它在運行時動態地向任務添加依賴項。Ant不允許這樣的事情
//命令 gradle -q task0
//輸出 
//	I'm task number 2
//	I'm task number 3
//	I'm task number 0
//--------------------


4.times { counter ->
    task "task$counter" {
        doLast {
            println "I'm task number $counter"
        }
    }
}
task0.dependsOn task2, task3




//--------------------
// 操作現有任務-添加行爲
//命令 gradle -q hello
//輸出 
//     Hello Venus
//     Hello Earth
//     Hello Mars
//     Hello Jupiter
//--------------------

task hello {
    doLast {
        println 'Hello Earth'
    }
}
hello.doFirst {
    println 'Hello Venus'
}
hello.configure {
    doLast {
        println 'Hello Mars'
    }
}
hello.configure {
    doLast {
        println 'Hello Jupiter'
    }
}



//--------------------
// Groovy DSL快捷方式表示法
//有一種方便的表示法來訪問現有任務。每個任務都可以作爲構建腳本的屬性使用:
//命令 gradle -q hello
//輸出 
//     Hello world!
//     Greetings from the hello task.
//--------------------



task hello {
    doLast {
        println 'Hello world!'
    }
}
hello.doLast {
    println "Greetings from the $hello.name task."
}


//--------------------
//額外的任務屬性
//可以將自己的屬性添加到任務中。要添加名爲的屬性myProperty,請設置ext.myProperty爲初始值。從那時起,可以像預定義的任務屬性一樣讀取和設置屬性。
//命令 gradle -q printTaskProperties
//輸出 
//     myValue
//     
//--------------------

task myTask {
    ext.myProperty = "myValue"
}

task printTaskProperties {
    doLast {
        println myTask.myProperty
    }
}

//--------------------
//默認任務
//Gradle允許您定義在未指定其他任務時執行的一個或多個默認任務
//命令 gradle -q 
//輸出 
//     Default Cleaning!
//     Default Running!
//     
//--------------------

defaultTasks 'clean', 'run'

task clean {
    doLast {
        println 'Default Cleaning!'
    }
}

task run {
    doLast {
        println 'Default Running!'
    }
}

task other {
    doLast {
        println "I'm not a default task!"
    }
}



//--------------------
//依賴任務的不同輸出
//Gradle具有配置階段和執行階段。在配置階段之後,Gradle知道應該執行的所有任務。Gradle爲您提供了一個利用這些信息的鉤子。這樣的用例是檢查釋放任務是否是要執行的任務之一。根據此情況,您可以爲某些變量分配不同的值。
//在以下示例中,執行distribution和release任務會導致version變量的值不同。
//命令 gradle -q distribution 
//輸出 We build the zip with version=1.0-SNAPSHOT
//命令 gradle -q release
//輸出
//    We build the zip with version=1.0
//    We release now 
//--------------------

task distribution {
    doLast {
        println "We build the zip with version=$version"
    }
}

task release {
    dependsOn 'distribution'
    doLast {
        println 'We release now'
    }
}

gradle.taskGraph.whenReady { taskGraph ->
    if (taskGraph.hasTask(":release")) {
        version = '1.0'
    } else {
        version = '1.0-SNAPSHOT'
    }
}





//--------------------
//構建腳本的外部依賴項
//如果構建腳本需要使用外部庫,則可以將它們添加到構建腳本本身的腳本類路徑中。您可以使用該buildscript()方法執行此操作,並傳入一個聲明構建腳本類路徑的塊。
//對於多項目構建,使用項目buildscript()方法聲明的依賴項可用於其所有子項目的構建腳本
//命令 gradle -q encode 
//輸出 aGVsbG8gd29ybGQK
//--------------------

import org.apache.commons.codec.binary.Base64

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath group: 'commons-codec', name: 'commons-codec', version: '1.2'
    }
}

task encode {
    doLast {
        def byte[] encodedString = new Base64().encode('hello world\n'.getBytes())
        println new String(encodedString)
    }
}


//--------------------
//使用方法
//Gradle可以擴展您如何組織構建邏輯。爲上面的示例組織構建邏輯的第一個級別是提取方法。
//對於多項目構建,使用項目buildscript()方法聲明的依賴項可用於其所有子項目的構建腳本
//命令 gradle -q loadfile 
//     I'm fond of build.gradle
//     I'm fond of build2.gradle
//     I'm fond of gradle.properties
//     I'm fond of java_pid39256.hprof
//--------------------



task checksum {
    doLast {
        fileList('../../').each { File file ->
            ant.checksum(file: file, property: "cs_$file.name")
            println "$file.name Checksum: ${ant.properties["cs_$file.name"]}"
        }
    }
}

task loadfile {
    doLast {
        fileList('../Downloads').each { File file ->
            ant.loadfile(srcFile: file, property: file.name)
            println "I'm fond of $file.name"
        }
    }
}

File[] fileList(String dir) {
    file(dir).listFiles({file -> file.isFile() } as FileFilter).sort()
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章