使用groovy代码方式解开gradle配置文件神秘面纱

news2025/2/22 0:04:11

来到这里的是不是都有以下疑问:

1.build.gradle配置文件结构好复杂啊,怎么记?

2.内部是怎么进行分析和执行的?

3.为什么可以在配置文件里面写groovy代码,怎么识别的?

4.怎么才能很方便的记住和快速上手gradle呢?

好的,现在我带着你们的疑问,使用groovy代码的方式,慢慢解开build.grade神秘的面纱,探索其中的奥妙!!!

声明:不要急,我们慢慢深入,请耐心看完

首先我们先看一段groovy代码

        def dependencies = {
                println("我执行了")
        }

        dependencies()

执行结果:

这断代码就是一个无参方法声明和调用,是不是非常简单。

现在我们进一步改造

代码:

        def dependencies = {
            int a, int b ->
                println("我执行了" + a + b)
        }

        dependencies(1, 2)

 执行结果:

我这次只是加了两个整型参数,进行打印。

好的,我们再次深入改造

代码:

        def dependencies = {
            int a, int b, Closure c ->
                println( a+b)
                c.call()
        }

        dependencies(1, 2){
            println("我执行了")
        }

 执行结果:

 卧槽,什么鬼!!!!,竟然也行,

重要先看这部分代码

 dependencies(1, 2){
            println("我执行了")
        }

这部分代码起始可以看成是两部分:

1. 执行函数部分,dependencies(1, 2)

 2.回调函数逻辑实现部分, 

{
    println("我执行了")
}

当我们执行

dependencies(1, 2){
    println("我执行了")
}
这段代码时,实际执行流程就是将
{
    println("我执行了")
}这部分代码生成回调函数,由Closure对象的call函数进行执行回调 

然后真正执行函数dependencies,然后执行Closure.call执行回调逻辑。

以上都看明白了,现在我们真正进入主题

以gradle配置文件为例子,如下

dependencies {

    implementation 'com.google.android.material:material:1.4.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}

此时你有该蒙蔽了

implementation 'com.google.android.material:material:1.4.0'是什么意思啊,你上面没有说啊,

那好,我们现在说,其实方法调用还有另一种方式

方法名称  参数1[,参数2]

就拿前面举得例子

代码:

        def dependencies = {
            a ->
            println("结果:" + a)
        }

        dependencies 100

执行结果: 

和dependencies(100)效果是一样的,

那好现在明白了,原来implementation、testImplementation、androidTestImplementation 其实就是内置函数哈。


    implementation 'com.google.android.material:material:1.4.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'

这些其实都是在调用函数哈,

dependencies {

    implementation 'com.google.android.material:material:1.4.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}

那好,现在我就按照这个配置文件整体实现一下代码。

代码:

 def implementation = {
            arg ->
                println("引入接口依赖:" + arg)
        };

        def testImplementation  = {
            arg ->
                println("引入测试接口依赖:" + arg)
        };

        def androidTestImplementation = {
            arg ->
                println("引入安卓测试接口依赖:" + arg)
        }

        def dependencies = {
            Closure c ->

                c.call()
        }



        dependencies{
            implementation 'com.google.android.material:material:1.4.0'
            implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
            testImplementation 'junit:junit:4.13.2'
            androidTestImplementation 'androidx.test.ext:junit:1.1.3'
            androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
        }

执行结果:

恍然大悟,原来build.gradle配置文件其实就是在执行各种函数。

应当随时学习,学习一切;应该集中全力,以求知道得更多,知道一切

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/382779.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

空口协议Eapol、802.11 Action、802.11 BAR 和 802.11BA、802.11 Encrypted Data讲解

如下报文 可以看到,除了有之前开放认证的报文之外,还多了 EAPOL 次握手的报文。另外,还有其他几种类型的报文:802.11 Action、802.11 BAR 和 802.11BA、802.11 Encrypted Data ​ 密匙认证协议EAPOL: EAP是Extensible Authentication Protocol的缩写,EAPOL就是(EAP…

Python搭建一个steam钓鱼网站,只要免费领游戏,一钓一个准

前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 我们日常上网的时候,总是会碰到一些盗号的网站,或者是别人发一些链接给你, 里面的内容是一些可以免费购物网站的优惠券、游戏官网上可以免费领取皮肤、打折的游戏。 这些盗号网站统一的目…

go版本分布式锁redsync使用教程

redsync使用教程前言redsync结构Pool结构Mutex结构acquire加锁操作release解锁操作redsync包的使用前言 在编程语言中锁可以理解为一个变量,该变量在同一时刻只能有一个线程拥有,以便保护共享数据在同一时刻只有一个线程去操作。对于高可用的分布式锁应…

6招优化WordPress打开速度-让你的网站飞起来

为什么我们的WordPress网站比你的快? 我们的官网是使用WordPress框架搭建的,有没有发现我们的网站非常快,而你的WordPress网站比较慢呢?那是因为我们的网站经过了优化。 WordPress 很慢? 为什么很多人都会觉得 Word…

【C语言进阶:指针的进阶】函数指针

本章重点内容: 字符指针指针数组数组指针数组传参和指针传参函数指针函数指针数组指向函数指针数组的指针回调函数指针和数组面试题的解析⚡函数指针 函数指针:指向函数的指针。 通过之前的学习我们知道数组指针中存放的是数组的地址,那么函…

如何在网络安全中使用人工智能并避免受困于此

人工智能在网络安全中的应用正在迅速增长,并对威胁检测、事件响应、欺诈检测和漏洞管理产生了重大影响。根据Juniper Research的一份报告,预计到2023年,使用人工智能进行欺诈检测和预防将为企业每年节省110亿美元。但是,如何将人工…

Sqoop 使用详解

Sqoop 概述Sqoop 是Apache 旗下的一款开源工具,用于Hadoop与关系型数据库之间传送数据,其核心功能有两个:导入数据和导出数据。导入数据是指将MySQL、Oracle等关系型数据库导入Hadoop的HDFS、Hive、HBase等数据存储系统;导出数据是…

web学习-Node.js入门学习

web学习-Node.js入门学习1.回顾与思考2. 初识Node.js2.1 Node.js的简介2.2Node.js的环境安装2.3. fs文件系统模块2.3.1 fs.readFile()2.3.2 fs.writeFile()2.3.3 练习-整理考试成绩2.3.4 fs模块-路径动态拼接的问题2.4 path路径模块2.5 http模块2.5.1 服务器相关的概念2.5.2 创…

移动app安全测试工具好物分享

移动互联网时代,我们的生活和工作深受移动app的影响。随着移动app的广泛应用,安全问题成为人们最关注的话题之一。移动app安全除了和软件开发密不可分之外,软件测试的作用也是不容忽视的。移动app安全测试是指测试人员利用各种测试手段验证Ap…

Java之注解

注解1.1 注解的概念1.2 内置注解1.3 元注解1.4 自定义注解1.1 注解的概念 Annotation 是从JDK5.0 开始引入的新技术 Annotation的作用: 不是程序本身,可以对程序做出解释(这一点和注释comment没什么区别)可以被其他程序&#xff…

解读场景化视频制作工具的实现过程

内容视频化正当其时,企业级智创工具创造新价值。全领域的内容视频化已是显性之势,其不仅覆盖传媒行业,更多泛行业正在以视频化内容的多元姿态创造新的商业价值。于是,不仅新闻传媒行业在超前体验智能化视频创造的效能红利&#xf…

ClickHouse进阶篇-多表连接物化视图

简介 在写这篇文章的时候doris 1.2 的物化视图只是支持单表建立物化视图,现在说下ClickHouse多表的物化视图。 前言 本文翻译自 Altinity 针对 ClickHouse 的系列技术文章。面向联机分析处理(OLAP)的开源分析引擎 ClickHouse,因…

蓝库云|ERP系统在企业数字化转型中最常用的八大功能

ERP系统和与企业数字化转型 随着数字化发展的兴起,规划和管理已成为企业产生富有成效的成果的关键。许多企业采用了企业资源规划 (ERP) 等先进工具,使企业所有者能够以高效的方式规划和管理其资源和运营。 ERP系统负责整合业务的不同流程并向决策者提供…

【LeetCode】剑指 Offer 20. 表示数值的字符串 p127 -- Java Version

题目链接:https://leetcode.cn/problems/biao-shi-shu-zhi-de-zi-fu-chuan-lcof/ 1. 题目介绍(20. 表示数值的字符串) 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。 数值(按顺序&#xff…

【软件测试】还在背锅?接口自动化测试5个测试点(重要)8年测试的总结......

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 功能测试 接口的功能…

什么是数据可视化,数据可视化有什么价值

“数据可视化”这个词看上去似乎让人有点摸不着头脑,但其实在实际生活中也有类似的应用。举个例子,媒婆给你介绍对象,前面给你铺垫一堆,如五官端正、身材修长、皮肤雪白(各种繁杂的信息描述),你…

Java集合(一)

目录 Java集合框架概述 Collection接口 Collection接口方法 Iterator迭代器接口 使用 Iterator 接口遍历集合元素 Iterator接口的方法 Iterator接口remove()方法 使用 foreach 循环遍历集合元素 Java集合框架概述 一方面, 面向对象语言对事物的体现都是以对…

一文搞懂华为的HCIA-Datacom(学习视频+模拟器+考试题库)

一、华为认证是什么? 二、为什么要选择华为认证 三、HCIA-Datacom的介绍 1.通过认证验证的能力 中小型园区网络的规划设计、部署实施、运维和优化能力 2.建议掌握的知识 路由交换原理、WLAN基本原理、网络安全基础知识、网络管理与运维基础知识、以及SDN与编程自动…

全球十大正规贵金属交易价格走势app软件排名(2023口碑榜)

最近,随着人们对贵金属产品的需求增加,贵金属价格走势变得更加复杂。为了更好地掌握贵金属市场的变化,很多投资者都在寻找一款可以追踪贵金属价格走势的app软件。 针对这一需求,现在已经有多款贵金属价格走势软件涌现在市场上。…

SSRF学习 3

目录 <1> 什么是SSRF&#xff1f; <2> 通常SSRF会发生在哪些位置&#xff1f; <3> 测试流程 <4> Weblogic-ssrf 复现 (1) 漏洞存在点 (2) 注入HTTP头&#xff0c;利用Redis反弹shell (3) 修复方案 <1> 什么是SSRF&#xff1f; SSRF(Serv…