【Gradle学习】—— Gradle的进阶使用

第十章 gradle自动化构建系列文章 之 gradle中的project gradle 中的project gradle 相对于maven,ant的强大之处在于可以变成控制构建的整个流程,不再局限于xml配置文件 gradle项目和我们平时理解的 AndroidStudio 项目不同,从gradle执行的角度理解,每一个moudle都是一个独立的project,包括最外层的project 也是project, 里面的task都是独立存在的 1. gradle... 阅读详情

前面学习了 gradle的基础——groovy的基本语法,现在可以深入点,列个知识小点目录:

  • 闭包
    • 基础详解
      • 代码块
      • 参数 -> 左边为参数 右边为代码块 可以使用${}引用代码块
      • 返回值
      • 三个重要变量
        • this:代表闭包定义处的类
        • owner:代表闭包定义处的类或者对象
        • delegate:代表任意对象 (默认owner一致)
        • 闭包的委托策略
    • 使用详解
    • 进阶讲解
  • 数据结构
    • 列表
      • 列表排序 sort()
      • 列表查询 find() findAll() any() every() min() max()
    • 映射 - map
      • 索引:key必须为字符串,value可以为任何对象
      • 添加
      • 遍历 each
        • 直接遍历key-value
        • 遍历entery
      • 查找 find findAll collect
      • 分组 groupBy
      • 排序
    • 范围 -Range
      • List的子类
  • 面向对象
    • 类
    • 接口
    • trait :和接口差不多,但是可以实现方法,不实现的方法抽象出来
    • 元编程
      • 方法:本类中没有 -> MeteClass ->是否重写MethodMissing() ->是否重写InvokeMethod()
      • 为String类添加一个反转的方法
  • 进阶使用
    • json操作
      • 对象转json:toJson()
      • json转对象:jsonSlpuer.parse()
    • xml处理
      • 解析xml:XmlSlurper.parseText(xml)
      • 生成xml:MarkupBuilder(StringWriter)
      • 遍历:
        • 深度遍历:.depthFirst().findAll{}
        • 广度遍历:.children.findAll{}
    • 作业json文件转换成xml文件
    • 普通文件操作
      • eachLine、getText、readLines :遍历文件内容
      • withReader :读取文件部分内容、不需要关闭流,内部有关流的操作
      • withObjectOutputStream:操作对象输出流
      • withObjectInputStream:操作对象输入流
  • Gradle
    • project
      • project API
        • project相关api
          • allprojects{}、project{}、subprojects{} 作用范围不同:所有project、当前project、子project(不包括当前project)
          • apply from :引入gradlec文件
        • task相关api
          •  
        • 属性相关api
          • ext{} :扩展属性
          • gradle.properties : 所有build.gradle中的属性都可以在这里定义
        • file相关api
          • 路径获取
            • getRootDir()
            • getBuildDir()
            • getProjectDir()
          • 文件操作 --同一个工程下操作
            • 文件定位
              • file() 相对于当前project中寻找
                • form file('XXXXXX') into XXXXX 拷贝文件
            • 文件遍历
              • fileTree(文件地址){}
        • gradle生命周期api
        • 其他api
          • 依赖相关api
            • buildscript{ }
              • respositories{ 仓库地址 }
              • dependencies{ 工程的插件依赖地址 }
              • exclude 排除依赖
              • transitive 传递依赖 尽量减少应用
              • compile
              • provided 编译时会引用第三方所有类 打包时 不会直接打入包中(一、只在编译阶段起作用时用 二、在主工程中有引用的情况下)
          • 外部命令执行方法
            •  
        •  
    • Task
      • 创建Task
        • 直接通过task函数创建
        • 通过TaskContainer去创建task: this.tasks.create("task名"){ }
      • Task配置:描述、分组、类型、依赖、重写、执行逻辑
      • 执行阶段 先执行外部再执行内部
        • doFirst:执行阶段执行
        • doLast:追加任务,Task前面加入执行过程
        • 计算build执行时长
      • task执行顺序
        • 同时依赖多个task ,依赖的task随机顺序执行
        • mustRunAfter 指定运行顺序
      • task输入输出
        •  
        •  
      • task类型
    • gradle其他
      • settings:gradle的初始化阶段就是执行settings.gradle中的内容
      • SourceSet:决定源码、资源、库 存放的位置
      • plugin:
        • @TaskAction:执行于gradle执行阶段的代码
      • Android 插件
        • Variants 变体
    • gradle工程
      • 迁移
      • 改造
  • 其他
    • Groovy没有网络的jar包 需要借助java中的Httpconnection之类的

对于Android开发者而言,深入gradle学习的成本较大,从业务角度考虑,不建议太深入学习,以可以写简单的gradle构建脚本和看懂复杂的脚本为目标!

1、构建块 

Gradle构建都包含三个基本构建块 project、task、property

 

一个项目(project)代表一个正在构建的组件(比如,一个jar文件)

 

  1. 项目:支持多项目构建

  2. 任务:

    1. 任务动作:定义一个当任务执行时最小的工作单元,如打印文本

    2. 任务依赖:任务之间的相互依赖

  3. 属性:新建的Task类都是Default类型的,所有的属性的都是private的,只能通过getter、setter来访问

 

2、Task的使用

    

  1. task依赖 - dependsOn

            注意:task的执行顺序是不确定的,其执行顺序又task的输入/输出规范自动确定

 

  1. 终结器Task(finalizer task)

            区分finalizer task 和 finalized task的概念

            

task taskX << {

        println 'taskX'

}

 

task taskY << {

        println 'taskY'

}

 

taskX.finalizedBy taskY

        taskX就是被修饰的,taskY修饰的,所以taskX是finalized task,taskY是finalizer task

 

        3.  Task的配置:不用定义动作或者使用左移操作符(<<),没有任何依赖关系,task配置块永远在task动作执行之前被执行,完全取决于Gradle构建的生命周期

 

3、Task构建生命周期

  1. 初始化:寻找哪些task依赖需要参与到构建中

  2. 配置:构造一个模型表示任务,并参与到构建中

  3. 执行:按Task的顺序执行

 

    构建过程中有一点要说,就是gradle的增量式构建,也是gradle的特性,前提是为每个Task定义输入(inputs)、输出(outputs),如果在执行一个Task时,它的输入与输出与前一次没有发生变化,那么该Task为最新(UP-TO-DATE),gradle不予执行。

 

    1、自定义Task

        创建一个动作方法和暴露它的配置属性,可以实现一个自定义的task

 

    2、gradle内置的task类型:Copy、Zip、Delete、War....

 

    3、声明task规则:

  1. 获得对TaskContainer的引用

  2. 调用addRule(String,Closure)--第一个参数:描述型信息,第二个参数:应用规则的闭包

     3、根据约定大于配置的特性,Gradle在buildSrc目录下使原文件结构标准化,一般将构建代码放在buildSrc目录下

     4、了解构建生命周期之后可以做点事了,可以通过hook的方式,在初始化、配置以及构建阶段,实现自己的需求

    

    6、通过监听器监听构建生命周期

  1. 编写一个特定的类实现特定的监听接口(TaskExcutionGraphListener接口提供)

  2. 注册监听器实现

CloudCompare横截面工具实战:从点云切片到轮廓提取的完整流程 本文详细介绍了CloudCompare软件中Cross Section工具的核心功能与实战流程。从交互式裁剪框的精准操控,到包络线提取的参数设置与优化,再到内部轮廓提取及批量处理技巧,完整解析了如何从三维点云中高效提取建筑立面、隧道断面等关键轮廓信息,是点云数据处理与分析的实用指南。 阅读详情

相关推荐

OCV/AOCV/SOCV的介绍和应用

library中的cell delay是在某个固定的PVT(operating condition)下仿真得出的。,cell的delay并不是一个固定值,而是一个随机值,遵循高斯分布或门特卡洛分布,在STA中用OCV来模拟这一『特征』。OCV全称on chip variation,用于描述不同管子间由于工艺偏差、电压降、温度变化引起的delay变化。,也用于描述工艺偏差引起的net厚度宽度的变化从而导致net的电容电阻变化。优点:设置起来比较简单粗暴,对于不那么先进的工艺可行!的影响,更贴合实际。

m0_61003348的博客 8980

7--Gradle进阶 - settings.gradle的文件说明

7--Gradle进阶 - settings.gradle的文件说明前言介绍 settings.gradle 文件之前,先来说明一下,settings.gradle 主要是用来多模块工程使用的。所以我们先来创建一个多模块的工程。多模块工程创建1. 创建 root 工程16858777561761.1 配置本地 Gradle16858780537281.2 配置依赖1685878091474plug...

DevOps海洋的渔夫@专栏 2471

光模块组成

时钟恢复电路(Clock Data Recovery,简称CDR)是光模块中的关键组成部分,CDR的作用主要是从接收到的信号中提取出数据序列,并且恢复出与数据序列相对应的时钟时序信号,从而还原接收到的具体信息。因为光信号传输至一定距离的时候,通常是长距离传输,其波形会出现一定程度的失真,接收端接收到的信号是一个个长短不一的脉冲信号,这个时候在接收端,我们就无法得到我们需要的数据。所以,这个时候就需要有信号的再生,信号的再生功能为再放大、再整形和再定时,其中的再定时指的就是CDR时钟数据恢复。

han_better的博客 5721

Gradle筑基——Gradle APi详解

这篇文章主要是对Gradle中我们比较常用给的一些api进行了讲解。主要包括Project相关apiTask相关api文件相关api和属性相关api等,其实还有一些其他的比如外部命令的api,这些很少会用到,就不再讲解了.可以结合这篇文章,自己再去看源码和相关官网文档,会让自己对api的认识更加深刻。后面会持续推出Gradle的一些高级语法,如自定义插件优秀开源框架插件的解读以及AGP的解析;

Dream It Possible 1055

VMware Workstation Pro 17 高效安装与激活指南

本文详细介绍了VMware Workstation Pro 17的高效安装与激活方法,包括系统要求、安装步骤、常见问题解决方案及性能优化技巧。通过专业的指导,帮助用户快速掌握这款强大的虚拟机软件,提升工作效率。

weixin_29322855的博客 402

ParallelsDesktop 安装 CentOS-6.9-x86_64-minimal 教程

安装参考 tools没做 想安装的可以参考这个 mac 本机环境: 系统:macOS Catalina version 10.15.6 虚拟机软件:parallels Desktop 15 for Mac( Parallels Desktop-15.1.4(47270)) Centos镜像: CentOS-6.9-x86_64-minimal.iso https://mirrors.aliyun.com/centos-vault/6.8/isos/x86_64/ http://vault.centos.

爱吃鱼的小明的博客 955

用Idea 2019.3+和Gradle5.2.1+ 构建SpringBoot多项目(五)

上一篇工程可以初步运行了,这一篇目标是可以获取属性文件中的自定义值,并实现统一异常处理等功能。 之前记录是rootProject包含moduleProject,moduleProject包含businessProject;businessProject是真正的逻辑实现工程,moduleProject只是用作功能分组文件夹使用,这种模式大家比较麻烦,于是吧moduleProject改成文件夹,选中rootProject创建businessProject,然后移动到对应文件夹下,初步效果如下: 这里需要

幽灵 逐梦--专栏 695

Ferromagnetic soft continuum robots

本文来自机器人领域顶刊,Science Robotics。介绍了一种铁磁软连续体机器人,主要贡献为1)介绍了一个基于磁性微粒和聚合物的软连续体机器人的制造方法,在机器人外表面涂了一层水凝胶,极大地降低了摩擦阻力;2)并研究了在磁场下,不同粒子体积分数下,此机器人的驱动性能;利用手动操控的磁铁,进行了许多实验证明该机器人性能的优异性。 铁磁软连续体机器人 Ferromagnetic soft continuum robots [1] Paper Link Authors: Kim, Yoonho, et al

XU Yangxin的博客 1372

【gradle源码系列3】Project用法示例方法总结源码分析

该接口是与Gradle从构建文件中交互的主要API。通过一个Project,你可以编程访问Gradle的所有功能。

wang2leee的博客 1336

构建高可用CephFS NFS网关:NFS-Ganesha与RADOS集群的深度整合

本文详细介绍了如何构建高可用的CephFS NFS网关,通过NFS-Ganesha与RADOS集群的深度整合,实现高效文件共享。文章涵盖核心架构、部署实战、性能调优及避坑指南,帮助用户解决Ceph客户端兼容性问题,提升存储访问效率。特别强调高可用设计,确保服务稳定性,适用于金融、电商等高要求场景。

weixin_26976635的博客 254

7 中望CAD二次开发-标注(一)(ZRX C++)

尺寸标注是CAD设计中最常用的功能之一,软件内置了很多标注功能,可以通过使用这些标注工具,对需要标注的长度、角度等一个个进行标注。但这显然效率很低,学习CAD二次开发,就是要把人从重复的劳动中解放出来,实现批量标注。本文介绍,如何通过二次开发进行标注。

cilvsuanna的博客 339

Gradle 学习 ----Gradle 进阶说明

GRADLE_USER_HOME/caches/modules-2/files-2.1目录下面,所以这里的GRADLE_USER_HOME相当于Gradle的本。1.Terminal中以gradlew开头指令用的是Wrapper规定的gradle版本,wrapper中规定版本默认和idea插件中规定的版本一致。2.准确的将指定版本的gradle下载并解压到指定的位置(GRADLE_USER_HOME目录下的wrapper/dists目录中)groovy文件的内容被打包进。..................

沉淀所学,分享所思,让热爱与成长同行。商务记录AI实战经验,助力开发者快速成长。 热爱AI,希望做出有影响力的技术成果。 技术点亮生活,分享连接价值与机会。 专注AI落地实战,陪你走好技术每一步。 2879

AutoSAR系列讲解(深入篇)14.7-Mcal Adc配置(上)

详细讲解了ADC的各个配置项的作用

雪云飞星的博客 1万+

Gradle 进阶学习之 Gradle插件

使用插件是现代自动化构建工具中一个非常重要的概念,Gradle 作为其中一个流行工具,通过插件提供了多种便利。以下是使用插件的几个主要原因:

一切总会归于平淡 1669

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Gradle 进阶学习 之 build.gradle 文件

build.gradle 是什么? 想象一下,你有一个大型的乐高项目,你需要一个清单来列出所有的乐高积木和它们如何组合在一起。在软件开发中,build.gradle 就是这个清单,它告诉计算机如何构建(组合)你的软件项目。

一切总会归于平淡 5044

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Gradle 进阶学习 之 Task

Task就像是Gradle项目中的小小机器人,每个机器人都有特定的工作要做,而且它们还可以根据项目的需要调整自己的工作方式。通过组合不同的Task,你可以构建起复杂的构建流程。

一切总会归于平淡 1940

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Gradle 进阶学习

module gradle Gradle版本 Gradle 目录下 - wrapper - gradle-wrapper.properties Plugin version / Gradle version 2.1.3 - 2.2.3 2.14.1+ 2.3.0+ 3.3+ 3.0.0+ 4.1+ 3.1.0+ 4.4+ Gradle 分类 apply pl...

NELA的博客 322

Gradle 进阶学习之 Dependencies 【依赖】

在Gradle中,依赖管理是一个非常重要的部分,它允许你指定项目所需的各种库和模块。你的案例中提到了三种常见的依赖类型:项目依赖、本地JAR依赖和远程仓库的直接依赖。下面我将分别解释这三种依赖类型,并提供相应的配置方法。

一切总会归于平淡 5835

【Gradle:新一代构建工具】学习笔记 3 Gradle进阶说明 3.24 Gradle中的项目发布

【Gradle:新一代构建工具】学习笔记 3 Gradle进阶说明 3.24 Gradle中的项目发布

代码改变世界 455

Gradle 进阶升级学习

(方式较杂 不推荐)Gradle-Wrapper是简化Gardle的安装和部署,如果本地没有部署Gardle就使用Gardle-Wrapper 使用Gradle-Wrapper 构建项目时gradlew命令 会启动一个小的虚拟机 下载Gradle-wapper.jar文件 启动jar文件 会去下载适配的 gradle-bin文件 然后使用 bin 文件去构建。 Gradle 构建快的原因? Gradle 3.0 之前 构建项目 先去启动JVM 然后加载所有的Jar包 会很浪费时间 ...

Wang________的博客 376

【Gradle:新一代构建工具】学习笔记 3 Gradle进阶说明 3.31 Gradle多模块项目案例演示【基于SSM】

【Gradle:新一代构建工具】学习笔记 3 Gradle进阶说明 3.31 Gradle多模块项目案例演示【基于SSM】

代码改变世界 459
上一篇: 【Gradle学习】—— Groovy基础语法以及数据结构
zc2echo
博客等级 码龄9年 6粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值