Loading

Gradle

1.Gradle安装

下载:https://gradle.org/releases/

配置环境变量:

vim .bash_profile

export GRADLE_HOME=/Users/zt/work/software/gradle-7.4.2
export PATH=$PATH:$GRADLE_HOME/bin

重新加载环境变量:source .bash_profile

验证:gradle -v

image

gradle目录结构介绍:

bin目录:命令

caches:jar默认地址

其他:自身运行环境,使用的时候基本不用关心

2.IDEA中使用Gradle

  • idea配置gradle

    image

  • 创建工程

    image

    image

3.Gradle目录结构介绍

  • 标准项目结构

    image

    src/main/java:正式源代码

    src/mian/resources:主要资源文件

    src/test/java:测试相关代码

    src/test/resources:测试相关资源文件

    build.gradle:相当于pom.xml

  • 项目打包

    image

    image

4.Gradle相关文件介绍

  • build.gradle构建脚本介绍

    gradle构建脚本中最重要的2个概念是project和task,任何一个gradle构建都由一个或者多个project组成,每个project包括许多构建部分,可以是一个jar也可以是一个web应用等

    image

    image

    每个工程都对应一个build.gradle构建脚本

  • Project对象

    一个project代表一个正在构建的组件(jar/war文件),当构建开始时,Gradle会基于build.gradle实例化一个org.gradle.api.Project对象,对象名称为project,通过project变量来隐式调用其他成员(使用groovy语法)

    Project属性:

    image

  • 设置仓库位置

    Gradle没有自己的中央仓库 ,使用的是maven的中央仓库

    在环境变量中设置:export GRADELE_USER_HOME=/Users/zt/work/software/repo

    在idea中设置gradle目录:

    image

    在build.gradle中的内容:

    repositories {
        /*
         * 指定仓库位置:默认情况下使用的是中央仓库,项目如果需要下载jar包从中央残酷下载到本地目录(gradle-7.4.2/caches/modules-2/files-2.1)
         * 使用本地maven仓库:下载后的内容在repo/caches/modules-2/files-2.1中
         */
        mavenLocal()
        mavenCentral()
    }
    
  • Task

    任务的定义方式:

    //定义任务方式1
    task(t1, {
        //配置代码
        println "我是任务1"
        //动作代码
        doFirst {
            println "在任务t1执行前操作的动作代码"
        }
        //动作代码
        doLast {
            println "在任务t1执行后操作的动作代码"
        }
    })
    
    //定义任务方式2,放在自定义分组下
    task(t2,{
        group("mytask")
        //配置代码
        println "我是任务2"
        //动作代码
        doFirst {
            println "在任务t2执行前操作的动作代码"
        }
        //动作代码
        doLast {
            println "在任务t2执行后操作的动作代码"
        }
    })
    
    //定义任务方式3
    tasks.create("t3"){
        group("mytask")
        //配置代码
        println "我是任务3"
    }
    
    //定义任务方式4
    tasks.register("t4"){
        group("mytask")
        //配置代码
        println "我是任务4"
    }
    
    //定义任务方式5
    tasks{
        task t5{
            group("mytask")
            //配置代码
            println "我是任务5"
        }
    }
    
    //定义任务方式6,可以一次性定义多个任务>>动态任务定义
    3.times{index ->
        task("task${index}"){
            group("mytask")
            //配置代码
            println "task${index}"
        }
    }
    

    定义好的任务默认在other分组下,可以通过group()来自定义任务分组

    image

    任务的依赖:

    task a{
        group("mytask")
        doFirst {
            println "我是任务a"
        }
    }
    task b(dependsOn:a){
        group("mytask")
        doFirst {
            println "我是任务b"
        }
    }
    task c{
        group("mytask")
        dependsOn "b"
        doFirst {
            println "我是任务c"
        }
    }
    task d{
        group("mytask")
        doFirst {
            println "我是任务d"
        }
    }
    d.dependsOn c
    

    定任任务:对某个已有的任务进行扩展,例如对clean内置任务进行扩展

    clean.doLast {
        println "我在clean之后执行这个逻辑"
    }
    
    tasks.named('clean').get().doFirst {
        println "我在clean之后执行这个逻辑"
    }
    

    Gradle项目构建生命周期:

    Gradle的生命周期分为三个阶段:初始化阶段,配置阶段,执行阶段

    初始化阶段:通过settings.gradle判断有哪些项目需要初始化,加载所有需要初始化的项目的build.gradle文件并为每个项目创建project对象

    配置阶段:执行各项目下的build.gradle脚本,完成project的配置,并且构造task任务依赖关系图

    执行阶段:通过配置阶段的task依赖图,按顺序执行需要执行的任务中的动作代码,就是在执行任务中写在doFirst或doLast中的代码

    通过tasks.register定义的任务,在build阶段的配置过程中不执行

    通过tasks.register定义的任务,在任务的执行阶段的配置过程中执行配置代码

    通过tasks.register定义的任务,配置代码的执行时机是落后于用task方式配置的

    (ps:可以吧一个任务理解为有3个生命周期,其中配置阶段执行除tasks.register定义的任务外所有任务的配置代码,在执行阶段只执行当前任务的动作代码)

5.多项目构建

在企业中一个复杂的项目往往是分成几个小项目来协同完成的,这就涉及到多项目的构建,而多项目构建则需要把一个大项目进行项目模块化,通过模块的互助协作完成整个功能。在之前使用maven的多项目构建时,一般需要一个root项目来统一管理所有的模块,gradle也一样使用一个root来统一管理所有的模块

![image-20220610230841844](/Users/zt/Library/Application Support/typora-user-images/image-20220610230841844.png)

![image-20220610230914707](/Users/zt/Library/Application Support/typora-user-images/image-20220610230914707.png)

配置:

  1. 统一插件配置在根项目的build.gradle中配置

    allprojects {
        //写法1
        plugins {
            id 'java'
        }
        //写法2
        apply plugin: 'java'
    }
    
  2. 统一配置公共属性

    allprojects {
        project.group='com.zt'
        project.version='1.0.0'
    }
    
  3. 配置项目的依赖关系,在子项目的build.gradle中配置

    dependencies {
       compile project('')
    }
    
  4. 统一资源库配置

    subprojects {
        repositories {
            mavenLocal()
            mavenCentral()
        }
    }
    
  5. 配置公用的依赖在根项目的build.gradle中

    subprojects {
        dependencies {
            testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
            implementation group: 'com.alibaba', name: 'fastjson', version: '1.2.83'
        }
    }
       
    

    PS:如果配置在subprojects外面,就只针对根生效,对子项目无效

posted @ 2022-06-11 00:13  ZT丶  阅读(178)  评论(0编辑  收藏  举报