gradle原理介紹


 一  項目的構建

兩個基本概念:項目(project)和任務(task)

關系:  一個構建至少包含一個項目、一個項目可包含多的任務,項目與項目  項目中任務與任務都可以建立依賴關系

項目:

一個項目代表一個構建的組件(如jar文件),當構建啟動時,gradle會根據build.gradle實例化一個org.gradle.api.Project類

屬性:

group  name  version  確定唯一個組件

apply dependencies  repositories task

ext

gradle.properties  存項目公共屬性

任務(org.gradle.api.Task):

任務動作:定義一個任務動作的執行順序

 

  • doFirst:task執行時,最開始的操作
  • doLast(<<):task執行時,最后的操作

依賴:定義任務與任務之間的依賴關系

 dependsOn

 二 生命周期

 構建的生命周期包括:初始化、配置、執行,並且對每個階段完成后都有一個hook方法,可自定義處理邏輯

  • 初始化:  首先尋找一個叫settings.gradle的文件,檢查是否當前構建是否是多項目構建,並負責創建項目樹,即為參與構建的每個工程創建一個 project 實例,並隱式可用
  • 配置:此階段,對 project 對象進行配置,屬於構建的所有 projects 的構建腳本都會被執行,執行的代碼可分為配置代碼和動作代碼(任務行為的定義),確定任務的依賴關系及執行順序
  • 執行:按照配置階段的任務順序進行執行

 

三 依賴管理

工件坐標   group name version

常用倉庫  

mavenLocal/mavenCentral/jcenter

自定義maven倉庫

文件倉庫

repositories {
    maven{
        url 'http://maven.aliyun.com/nexus/content/groups/public/' 
    }
    mavenLocal()
    mavenCentral()
    jcenter()
}

 

 依賴沖突解決策略(沖突時gradle默認使用最新的版本)

  • 1、查看依賴報告
  • 2、排除傳遞性依賴
  • 3、強制一個版本

 

configurations.all{
    resolutionStrategy{
        failOnVersionConflict()
        force 'org.slf4j:slf4j-api:1.7.22'
    }
}

dependencies {
    compile('org.hibernate:hibernate-core:3.6.3.Final') {
        exclude group: "org.slf4j", module: "slf4j-api"
    }
    testCompile group: 'junit', name: 'junit', version: '4.11'
    compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.1'
}

 

 

 

 

 

四 多項目構建

 

項目總控制bulid.gradle文件
allprojects{   //主項目定義
    apply plugin: 'java'
    apply plugin: 'war'
    sourceCompatibility = 1.8
}

subprojects{  //子項目中同一定義
    repositories {
        maven{
            url 'http://maven.aliyun.com/nexus/content/groups/public/'
        }
        mavenLocal()
        mavenCentral()
    }
    dependencies {
        compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.1'
        testCompile group: 'junit', name: 'junit', version: '4.11'
    }

}
model模塊 中文件 bulid.gradle 不用定義
repository模塊bulid.gradle
dependencies {
    compile project(":model")
}
web模塊bulid.gradle
apply plugin:'war'

dependencies {
compile project(":repository")
}

 

 

五 自動化測試

 

 

 

 六  發布

allprojects{
    apply plugin: 'java'
    apply plugin: 'war'
    sourceCompatibility = 1.8

    apply plugin: 'maven-publish'

    publishing{
        publications{
            myPublish(MavenPublication){
                from components.java
                groupId 'com.yincai.gradle'
            }
        }
        repositories {
            maven{
                name 'myRepo'
                url ''
            }
        }
    }
}

 

 

備注:自定義Task實例

def creatdir = { path -> File dir = new File(path) dir.mkdirs() } task makeJavaDir{ def paths = ['src/main/java','src/main/resources','src/test/java','src/test/resources',] doFirst{ paths.forEach(creatdir) } } task makeWebDir{ dependsOn 'makeJavaDir' def paths = ['src/main/webapp','src/test/webapp'] doLast{ paths.forEach(creatdir) } } //Gradle可以在沒有安裝Gradle的情況下使用,這時候就需要Gradle Wrapper了。Gradle Wrapper其實就是一個腳本文件,它會在沒有安裝Gradle的情況下為我們下載Gradle,之后我們就可以使用gradlew命令,像使用gradle一樣來使用Gradle了
//生成
wrapper任務
task wrapper(type: Wrapper){
    gradleVersion = '3.0'
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM