Gradle学习之基本语法入门

Gradle语法 Gradle 支持构建变体来处理不同构建场景的需求,如不同构建类型(debug/release)、不同构建 flavor(免费版/付费版)等。Gradle 使用一种基于 Groovy(或 Kotlin)的领域特定语言(DSL)来编写构建脚本。实际使用时,应结合官方文档和具体项目需求来深入理解和应用 Gradle 的各种特性。Gradle 提供了高效的缓存机制和增量构建能力,可以避免重复工作,加快构建速度。语句应用插件,插件可以添加新的任务、扩展项目属性、引入默认依赖等。等,用于控制构建过程的输出和行为。 阅读详情
请通过以下方式下载本系列文章的Github示例代码:
git clone https://github.com/davenkin/gradle-learning.git
 
 
Gradle是一种声明式的构建工具。在执行时,Gradle并不会一开始便顺序执行build.gradle文件中的内容,而是分为两个阶段,第一个阶段是配置阶段,然后才是实际的执行阶段。在
配置阶段,Gradle将读取所有build.gradle文件的所有内容来配置Project和Task等,比如设置Project和Task的Property,处理Task之间的依赖关系等。
 
虽然很多时候我们只需要照着网上的例子写自己的DSL语句就行了,但是此时我们所知道的也就只有这么多了。如果我们能够了解Gradle DSL的内部工作机制,那么我们便可以达到
举一反三的效果。在前面的文章中我们讲到,Gradle的DSL只是Groovy语言的内部DSL,也即必须遵循Groovy的语法规则。现在,让我们先来看看以下非常简单的Task:
 
task showDescription1 << {   
  description = 'this is task showDescription'   
  println description
}
task showDescription2 << {   
  println description
}
showDescription2.description = 'this is task showDescription'
task showDescription3 << {   
  println description
}
showDescription3 {   
  description = 'this is task showDescription'
}
 
 
以上3个Task完成的功能均相同,即先设置Task的description属性,在将其输出到命令行。但是,他们对description的设置方式是不同的。对于showDescription1,我们在定义一个Task的同时便设置description;对于showDescription2,其本身便是Project的一个Property;而对于showDescription3,我们是在一个和它同名的方法中设置description。
 
事实上,对于每一个Task,Gradle都会在Project中创建一个同名的Property,所以我们可以将该Task当作Property来访问,showDescription2便是这种情况。另外,Gradle还会创建一个同名的方法,该方法接受一个闭包,我们可以使用该方法来配置Task,showDescription3便是这种情况。


要读懂Gradle,我们首先需要了解Groovy语言中的两个概念,一个Groovy中的Bean概念,一个是Groovy闭包的delegate机制。
 
Groovy中的Bean和Java中的Bean有一个很大的不同,即Groovy为每一个字段都会自动生成getter和setter,并且我们可以通过像访问字段本身一样调用getter和setter,比如:
 
class GroovyBeanExample {   
  private String name
}
def bean = new GroovyBeanExample()
bean.name = 'this is name'
println bean.name
 
我们看到,GroovyBeanExample只定义了一个私有的name属性,并没有getter和setter。但是在使用时,我们可以直接对name进行访问,无论时读还是写。事实上,我们并不是
在直接访问name属性,当我们执行"bean.name = 'this is name'"时,我们实际调用的是"bean.setName('this is name')",而在调用"println bean.name"时,我们实际调用的是
"println bean.getName()"。这里的原因在于,Groovy动态地为name创建了getter和setter,采用像直接访问的方式的目的是为了增加代码的可读性,使它更加自然,而在内部,Groovy依然
是在调用setter和getter方法。这样,我们便可以理解上面对showDescription2的description设置原理。
 
另外,Gradle大量地使用了Groovy闭包的delegate机制。简单来说,delegate机制可以使我们将一个闭包中的执行代码的作用对象设置成任意其他对象。比如:
 
class Child {   
  private String name
}
class Parent {   
  Child child = new Child();   
  void configChild(Closure c) {      
     c.delegate = child      
     c.setResolveStrategy Closure.DELEGATE_FIRST      
     c()   
  }
}
def parent = new Parent()
parent.configChild {
  name = "child name"
}
println parent.child.name
 
 
在上面的例子中,当我们调用configChild()方法时,我们并没有指出name属性是属于Child的,但是它的确是在设置Child的name属性。事实上光从该方法的调用中,我们根本不知道name是属于哪个对象的,你可能会认为它是属于Parent的。真实情况是,在默认情况下,name的确被认为是属于Parent的,但是我们在configChild()方法的定义中做了手脚,使其不再访问Parent中的name(Parent也没有name属性),而是Child的name。在configChild()方法中,我们将该方法接受的闭包的delegate设置成了child,然后将该闭包的ResolveStrategy设置成了DELEGATE_FIRST。这样,在调用configChild()时,所跟闭包中代码被代理到了child上,即这些代码实际上是在child上执行的。此外,闭包的ResolveStrategy在默认情况下是OWNER_FIRST,即它会先查找闭包的owner(这里即parent),如果owner存在,则在owner上执行闭包中的代码。这里我们将其设置成了DELEGATE_FIRST,即该闭包会首先查找delegate(本例中即child),如果找到,该闭包便会在delegate上执行。对于上面的showDescription3,便是这种情况。当然,实际情况会稍微复杂一点,比如showDescription3()方法会在内部调用showDescription3的configure()方法,再在configure()方法中执行闭包中的代码。


你可能会发现,在使用Gradle时,我们并没有像上面的parent.configChild()一样指明方法调用的对象,而是在build.gradle文件中直接调用task(),apply()和configuration()方法等,这是
因为在没有说明调用对象的情况下,Gradle会自动将调用对象设置成当前Project。比如调用apply()方法和调用project.apply()方法的效果是一样的。查查Gradle的Project文档,你会发现这些方法都是Project类的方法。
 
另外举个例子,对于configurations()方法(它的作用我们将在后面的文章中讲到),该方法实际上会将所跟闭包的delegate设置成ConfigurationContainer,然后在该ConfigurationContainer上执行闭包中的代码。再比如,dependencies()方法,该方法会将所跟闭包的delegate设置成DependencyHandler。
 
还有,Project还定义了configure(Object object,Closure configureClosure)方法,该方法是专门用来配置对象的(比如Task),它会将configureClosure的delegate设置成object,之后configureClosure中的执行代码其实是在object上执行的。和Groovy Bean一样,delegate机制的一个好处是可以增加所创建DSL的可读性。
机器学习模型系列:随机森林的原理和示例介绍 让我们总结一下与其他监督式机器学习模型相比,随机森林的优缺点。优点在许多真实数据集上已知能提供高度准确的模型。通过结合多个决策树的预测,可以捕捉数据集中的复杂交互和模式。通过自动选择相关特征,可以有效处理高维数据集。与单个决策树相比,不容易过拟合。自助采样和每个节点的随机特征选择有助于减少过拟合并改善泛化能力。可以处理包括数值和分类特征在内的异构数据类型。可以处理缺失值而不需要填充。提供特征重要性的度量。集成中的树可以并行训练,因为每个决策树可以独立构建。模型的泛化误差具有理论上的界限。 阅读详情

相关推荐

PLC作为Modbus TCP客户端

PLC作为Modbus TCP客户端,Modbus Slave作为服务器

soledad_chao的博客 4378

Gradle学习系列之三——读懂Gradle语法

Gradle是一种声明式的构建工具。在执行时,Gradle并不会一开始便顺序执行build.gradle文件中的内容,而是分为两个阶段,第一个阶段是配置阶段,然后才是实际的执行阶段。在 配置阶段,Gradle将读取所有build.gradle文件的所有内容来配置Project和Task等,比如设置Project和Task的Property,处理Task之间的依赖关系等。   虽然很多

Capricornlg的专栏 1204

FMCW雷达基本原理(通俗易懂)篇2

FMCW雷达(Frequency Modulated Continuous Wave Radar)是一种使用频率调制连续波的雷达系统。它使用一个发射器发射一个连续波,但是这个连续波的频率会在一定的范围内不断变化。当这个连续波遇到一个目标物体并被反射回来时,接收器会检测到这个反射波的频率变化,并计算出目标物体的距离和速度等信息。FMCW雷达的原理可以理解为:1.发射器发射一个连续波,这个波的频率会从一个固定的起始频率开始,逐渐变化至一个固定的终止频率。

研二小学鸡的博客 7692

gradle(1)介绍和基本语法

目录一 简介二 实践2.1 helloworld2.2 任务依赖2.3 延迟依赖2.4 动态任务#2.5 任务操纵2.5.1增加依赖2.5.2 增加任务行为2.5.3 短标记法2.6 增加自定义属性2.7 调用 Ant 任务2.8 定义默认任务三 命令行实践(二)3.1 多任务执行3.2 排除任务3.3 忽略失败继续执行3.4 任务名缩写3.5 指定build配置文件/屏蔽其他辅助型输出/多项目的...

codezhuyc的博客 435

Halcon 3D视觉实战:5步将线激光高度数据转为可分析的深度图与点云

本文详细介绍了如何利用Halcon平台将线激光高度数据转换为深度图与点云的5步实战方法。通过具体代码示例和工业检测案例(如锂电池胶水测量),帮助工程师高效处理3D视觉数据,实现从原始数据到三维可视化的完整技术链路。

weixin_29039773的博客 361

DICOM三维重建:基于VTK实现三种面绘制算法

版本:VS2019、VTK9.0.1 #define vtkRenderingCore_AUTOINIT 3(vtkInteractionStyle,vtkRenderingFreeType,vtkRenderingOpenGL2) #define vtkRenderingVolume_AUTOINIT 1(vtkRenderingVolumeOpenGL2) #include "vtkDICOMImageReader.h" #include "vtkRenderWindowInteractor.h" #i

一直在笑的博客 5923

gradle快速入门

1. gradle语法 2. 自定义gradle插件

csfchh的博客 2632

Sublime Text4代码配色自定义方案

关于Sublime Text对于我的使用体验,只能说内置的代码主题真的都太low了,一点都不好看。所以接下来我分享一下我自定义代码配色。当然,大家也可以通过我给的中文翻译注释来自定义自己喜欢的颜色。废话不多说,直接上代码直接将代码复制粘贴到:Preferences > Customize Color Scheme 即可。},"globals":"foreground": "var(white)", // 前景色。

追求细节,成就完美 6026

Gradle筑基——Gradle语法

很多开发喜欢把Gradle简单定义为一种构建工具,和ant,maven等作用类似, 诚然Gradle确实是用来做构建,但是如果简单得把Gradle拿来做构建,就太小看Gradle了.笔者更愿意将Gradle看做一种编程框架。在这个框架中,你可以做很多ant,maven等常用构建工具做不了的事情, 如将自己的任务task集成到构建生命周期中,完成文件拷贝,脚本编写等操作。

Dream It Possible 574

Java服务端实现Google Pay支付功能

全网最全代码、最清晰服务端处理Google Pay,最清晰讲解Google Pay集成逻辑。

jack2350536098的博客 1万+

UE5.3与Colosseum配置实战:从编译到问题解决的全流程指南

本文提供了在Windows系统下配置UE5.3与Colosseum仿真环境的全流程实战指南。详细介绍了从软件版本选择、源代码获取、编译脚本执行到解决常见编译错误和引擎崩溃问题的具体步骤,旨在帮助开发者高效搭建无人机、机器人等仿真平台,并顺利运行外部API控制。

weixin_29002595的博客 557

gradle入门学习2——groovy基本语法与build.gradle(类似pom,但不是xml而是,groovy脚本语言)工程构建脚本配置解读

1、idea的tools工具菜单默认安装有groovy插件groovy console,用它写几个测试脚本 import org.assertj.core.util.Lists /*groovy 兼容Java*/ def testList= Lists.newArrayList("456", "789") testList.add('123') System.out.println(testL...

MJ的博客 395

一次搞定 SAP IDoc 失败重处理与安全清理:BD87 实战指南

本文介绍了SAP IDoc错误处理的BD87实战指南。主要内容包括: BD87的核心功能:监控IDoc处理状态并支持人工重处理或标记删除,适用于入站/出站IDoc故障处理。 重处理前的关键步骤: 区分技术错误与业务错误 检查是否允许重复处理 确认日期范围设置正确 标准操作流程:通过BD87选择错误IDoc节点执行重处理,特别适用于状态51的应用错误。 标记删除操作:将无用IDoc标记为可清理状态,后续可通过WE11物理删除或归档处理。 常见问题解决方案:包括权限控制、批量处理优化建议以及自动化定位工具的开发

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 453

Gradle 学习 ----Gradle 入门

Gradle是一款Google推出的基于JVM、通用灵活的项目构建工具,支持Maven,JCenter多种第三方仓库;支持传递性依赖管理、废弃了繁杂的xml文件,转而使用简洁的、支持多种语言(例如java、groovy等)的build脚本文件。官网地址https目前已经有相当一部分公司在逐渐使用Gradle作为项目构建工具了。作为Java开发程序员,如果想下载Spring、SpringBoot等Spring家族的源码,基本上基于Gradle构建的。...............

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

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Gradle系列(1) Gradle入门介绍及Groovy基本语法介绍

1、Gradle基本入门介绍 1、gradle/wrapper (1) wrapper 就是对gradle的一层封装,便于团队开发过程中统一Gradle的构建版本 (2) 生成wrapper: 在项目的根目录下运行 gradlew wrapper(mac下运行 ./gradlew wrapper )命令 2、gradle 常用命令行 (1) 查看所有可执行的任务 gradlew task...

weixin_42749141的博客 307

Camera2Demo

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

《Gradle构建脚本的基本结构和语法》

本文介绍了Gradle的基本结构和语法,帮助读者更好地理解和使用Gradle,提高项目构建和管理效率。从项目配置、任务、插件到常用命令,以及通过示例应用展示如何构建Java项目,内容涵盖全面。常见问题解答则解决读者实际应用中可能遇到的难题。读者通过学习本文,能够在软件开发中更有效地应用Gradle,提升项目开发效率和质量。Gradle是一种基于Groovy和Kotlin语言的构建工具,旨在简化构建、测试、部署和发布过程。它结合了传统的Ant和Maven的优点,提供了更灵活和易于扩展的构建脚本。

猫头虎技术团队:授渔优于赠鱼,兴趣引领智慧,探索之乐尤显珍贵。商务合作+:Libin9iOak ,万粉变现+:优快云WF,猫头虎承诺每年免费为100名C站创作者做账号流量诊断服务!全网搜:猫头虎技术团队,点击文章底部名片或直接私信我一切皆可谈,快找虎哥! 915

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Gradle快速入门学习

官网地址:Gradle 是一款Google 推出的基于 JVM、通用灵活的项目构建工具,支持 Maven,JCenter 等多种第三方仓库;支持传递性依赖管理、废弃了繁杂的xml 文件,转而使用简洁的、支持多种语言(例如:java、groovy 等)的 build 脚本文件。目前市面上常见的项目构建工具还有Ant、Maven。

huangjhai的博客 1510

Gradle学习之一入门介绍

文章目录第一章 课程导学第二章 快速入门2.1 概述2.2 特定语言DSL2.3 groovy初探第三章 开发环境搭建3.1 mac 安装3.1.1 下载Groovy SDK3.2 idea配置 第一章 课程导学 gradle的功能强大,maven和ant可以做的,它也可做。并且它使用SDL语言,是的配置更加灵活。掌握gradle: 可以完善Android和Java技术体系 提供自动化构建技术深度 全语言全平台的自动化构建工具 主要内容 Gradle开发环境的搭建 核心语法讲解和实战 字符串、.

C安君的博客 1168

Android Gradle入门

Gradle是一款非常优秀的构建系统工具,它的DSL基于Groovy实现,可以让你很方便的通过代码控制这些DSL来达到你构建的目的,其构建的大部分功能都是通过插件的方式来实现,所以非常灵活方便,如果内置插件不能满足你的需求你可以自定义自己的插件。

飞雪无情的博客 7286

Gradle之build.gradle 语法案例

group 'gradle-demo' //项目的版本号 version '1.0-SNAPSHOT' // 使用maven做为jar包的信赖管理,通过mave仓库下载项目所需的信赖包 apply plugin: 'maven' // 指定项目为java项目,项目编译(在项目提示符下执行:gradle build)时生成项目的jar包。 apply plugin: 'java' // Intel...

shuizhihun07的专栏 9317

gradle教程java_Gradle教程系列 ——Gradle基本语法

我们知道,Gradle是基于Groovy语言的DSL。在编写Gradle脚本时,也遵从Groovy的基本语法。当然,也可以直接使用Java编写Gradle脚本。本文主要简单介绍Groovy的基本语法。变量定义Groovy 会根据对象的值来判断它的类型,不需要像Java那样显式的声明变量类型。def value = "Hello World"闭包闭包(英语:Closure),又称词法闭包(Lexic...

weixin_39887386的博客 438

2--Gradle入门 - Groovy简介、基本语法

2--Gradle入门 - Groovy简介、基本语法Gradle 需要 Groovy 语言的支持,所以本章节主要来介绍 Groovy 的基本语法。1.Groovy 简介在某种程度上,Groovy 可以被视为Java 的一种脚本化改良版,Groovy 也是运行在 JVM 上,它可以很好地与 Java 代码及其相关库进行交互操作。它是一种成熟的面向对象编程语言,既可以面向对象编程,又可以用作纯粹的脚...

DevOps海洋的渔夫@专栏 3577

Gradle - 构建文件详解 build.gradle核心语法与配置规范

Gradle构建文件build.gradle详解:作为Gradle项目的核心配置文件,它定义了项目结构、依赖管理和构建行为。文章深入解析了build.gradle的基础语法(支持Groovy和Kotlin DSL)、插件配置方式、仓库声明规则以及依赖管理策略(implementation/api等不同作用域)。通过典型配置示例,帮助开发者掌握Gradle构建脚本的编写规范,实现高效的项目构建管理。内容涵盖多语言DSL对比、插件应用方法、仓库设置和依赖声明等核心知识点,适合Java开发者系统学习Gradle构

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

Gradle介绍1-入门和IDEA整合(Gradle Wrapper)

Gradle 是一款Google 推出的基于 JVM、通用灵活的项目构建工具,支持 Maven,JCenter 多种第三方仓库;支持传递性依赖管理、废弃了繁杂的xml 文件,转而使用简洁的、支持多种语言(例如:java、groovy 等)的build 脚本文件。官网地址:目前已经有相当一部分公司在逐渐使用Gradle作为项目构建工具了。作为Java开发程序员,如果想下载Spring、SpringBoot等Spring家族的源码,基本上基于Gradle构建的。

BASK2312的博客 2815

Gradle理论与实践一:Gradle入门

文章目录Gradle入门1、配置Gradle环境2、Gradle之Hello World3、gradle 与gradlew的区别4、Gradle命令介绍5、Gradle 工作流程 Gradle入门 Gradle一门DSL(Domain Specific Language,领域特定语言),Gradle基于Groovy语言,专门用来解决自动化构建。Gradle可以认为是一个框架,负责定义流程和规则。而...

小马快跑的博客 4332
上一篇: Gradle学习之创建Task的方法
下一篇: Gradle学习之增量式构建
minimicall
博客等级 码龄18年 407粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值