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'
}

猜你喜欢

转载自www.cnblogs.com/xhkyc90/p/9609159.html
今日推荐