ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Gradle

2022-06-11 00:31:40  阅读:151  来源: 互联网

标签:task 代码 配置 gradle 任务 println 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外面,就只针对根生效,对子项目无效

标签:task,代码,配置,gradle,任务,println,Gradle
来源: https://www.cnblogs.com/ZT-666/p/16365064.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有