gradle 學習

1     Groovy

Gradle是一個使用Groovy語言實現的用於構建項目的框架(僅僅是一個框架)。構件項目時真正起做用的是基於gradle框架使用Groovy語言實現的gradle插件。Gradle默認提供了不少的插件,好比:Java-Plugin、Maven-Plugin等。java

1.1     Groovy是什麼?

Groovy是用於java虛擬機的一種敏捷的動態語言,它是一種成熟的面對對象編程語言,便可以用於面對對象編程,又能夠用做純粹的的腳本語言。使用該種語言沒必要編寫過多的代碼,同時又具備閉包和動態語言的其餘特性。web

1.2 Groovy與java比較

Groovy徹底兼容java的語法(都是基於jvm的)編程

分號是可選的api

類、方法默認是public的閉包

編譯器給屬性自動加上get/set方法app

屬性直接用點號獲取框架

最後一個表達式的值會被做爲返回值webapp

==等同於equals方法,不會有NullPointExceptionsjvm

自帶assert語句maven

可選類型定義

可選的括號

字符串,三種表達形式

集合API,更簡單的寫法

閉包

1.3 Groovy 高級特性

1.    可選的類型定義

Def version =1

2.    Assert 斷言

3.    括號是可選的

4.    字符串

單引號

雙引號(裏面能夠插入變量)

三個單引號(能夠換行)

5.    集合api

a)     List(對應ArrayList)

                          i.          Def list = [‘ant’,‘gradle’]

                        ii.          List << ‘maven’

b)    Map(對應linkedHashMap)

                          i.          Def map = [‘ant’:2000 , ‘maven’:2004]

                        ii.          Map.gradle = 2009   Map[‘gradle’] = 2009 

6.    閉包

代碼塊,能夠被複制給變量,也能夠當作一個方法

def c1 = {
    v  ->
        print v
}
def c2 = {
    print 'hello'
}
def method1(Closure closure){
    closure('param')
}
def method2(Closure closure){
    closure()
}
method1(c1)
method2(c2)

2     Gradle構建工具

2.1     構建塊

Gradle構建中的兩個基本概念是項目(project)和任務(task),每一個構建至少包含一個項目,項目中包含一個或者多個任務。在多項目構建中,一個項目能夠依賴於其餘項目;相似的,任務能夠造成一個依賴關係圖來確保他們的執行順序。

1.    項目(project):一個項目表明一個正在構建的組件(好比一個jar),當構建啓動以後,gradle會基於build.gradle實例化一個org.gradle.api.Project類,而且可以經過project變量使其隱式可用。

a)     Group 、name、version

b)    Apply、dependencies、repositories、task

c)     屬性的其餘配置:ext、gradle.properties

2.    任務(task):任務對應org.gradle.api.Task。主要包括任務動做和任務依賴。任務動做定義了一個最小的工做單元,能夠依賴於其餘任務、動做序列和執行條件。

a)     Dependson

b)    DoFirst、doLast <<

3.    實例:在intellij IDE 中新建gradle工程時,沒有自動生成maven相似的目錄,下面的任務能夠用於建立

4.   def createDir = {
    path ->
        File dir = new File(path)
        if(!dir.exists()){
            dir.mkdirs();
        }
}
task makeJavaDir(){
    def paths = ['src/main/java',
                 'src/main/resources',
                 'src/test/java',
                 'src/test/resources']
    doFirst {
        paths.forEach(createDir)
    }
}
task makeWebDir(){
    dependsOn 'makeJavaDir'
   
def paths = ['src/main/webapp']
    doFirst {
        paths.forEach(createDir)
    }
}

2.2     構建聲明週期

1.    初始化:根據gradle腳本建立一個項目。初始化參與構建的項目

2.    配置:用來生成task的生成順序和執行順序

3.    執行,動做代碼(執行代碼在配置代碼以後執行)

提供了鉤子方法(hook)

3     依賴管理

1.    解決版本衝突:查看依賴報告1.排除傳遞性依賴2.強制一個版本

2.    多項目構建

相關文章
相關標籤/搜索