在上一篇博客 【Groovy】编译时元编程 ( 编译时方法拦截 | 在 MyASTTransformation#visit 方法中找到要拦截的方法 ) 中 , 在MyASTTransformation#visit 方法中 , 首先获取了 ModuleNode , 然后查找指定的 ClassNode , 从指定的 ClassNode 中查找对应的 MethodNode 节点 ;
声明 ASTTransformation 接口子类 , 并使用 @GroovyASTTransformation 注解修饰该类 ; 在实现的 void visit(ASTNode[] nodes, SourceUnit source) 方法中进行编译时处理 ;
方法中 , 其中 ASTNode[] nodes 参数是 AST 语法树根节点数组 , 每个数组元素都是一个 ModuleNode 对应一个 Groovy 脚本 ;
在 ASTTransformation#visit 方法中 , 使用 source.AST 也可以获取 AST 语法树根节点 , 使用 source.source.reader.text 可以和获取 Groovy 类源码的字符串形式 ;
首先 , 定义 Compile 注解 , 该注解名称是任意字符串 , @Target(ElementType.METHOD) 表示该注解作用于方法上 , @GroovyASTTransformationClass("MyASTTransformation") 表示该注解修饰的节点对应的 AST 转换接口实现类是 MyASTTransformation ;
做Android开发的同学,对Gradle肯定不陌生,我们用它配置、构建工程,可能还会开发插件来促进我们的开发,我们必须了解Gradle,而不仅限于只会当配置构建工具,我想学习它,于是就有了这一系列的文章。
spock2进行了较大的升级,基于Junit5,基于Groovy3(Groovy3要求JDK9+)
Groovy 是基于 JVM 虚拟机的一种动态语言,它的语法和 Java 非常相似,由 Java 入门Groovy,基本上没有任何障碍。Groovy 完全兼容 Java,又在此基础上增加了很多动态类型和灵活的特性,比如支持闭包,支持 DSL,可以说它是一门非常灵活的动态脚本语言。
接着上篇介绍的类型相关的知识内容,继续了解Groovy中关于类型Typing的相关知识内容。
DSL(Domain Specific Language)官方定义为:针对某一领域,具有受限表达性的一种计算机程序设计语言。
在Groovy中,下面这些包会默认引入。 - java.io.* - java.lang.* - java.math.BigDecimal - java.math.BigInteger - java.net.* - java.util.* - groovy.lang.* - groovy.util.*
以下内容节选自《Android Gradle权威指南》,更多关于《Android Gradle权威指南》的内容请参见http://yuedu.baidu.com/ebook/14a722970740be1e640e9a3e
Groovy 是一种基于 JVM 的动态语言,他的语法和 Java 相似,最终也是要编译 .class 在JVM上运行。
Groovy 是一种运行在 Java 虚拟机(JVM)上的动态语言,它以其简洁的语法和强大的功能而受到开发者的青睐。作为一种能够与 Java 无缝交互的语言,Groovy 继承了 Java 的许多优点,并且在某些方面进行了扩展和改进,使得开发者能够更加高效地编写代码。 以下是对Groovy特点的优化概述:
Gradle 需要 Groovy 语言的支持,所以本章节主要来介绍 Groovy 的基本语法。
在Java项目中,有两个主要的构建系统:Gradle和Maven。构建系统主要管理潜在的复杂依赖关系并正确编译项目。还可以将已编译的项目以及所有资源和源文件打包到.war或.jar文件中。对于简单的构建,Maven和Gradle之间的选择几乎是个人喜好之一,或者也许是公司CTO或技术经理的偏好。他们俩都是非常好的构建工具。但是,对于更复杂的项目,Gradle比Maven更胜一筹。
https://www.bilibili.com/video/BV1yT41137Y7
Groovy 是基于 JVM 的 动态脚本语言,可以与 Java 无缝对接。Groovy 并不替代 Java,而是与 Java 互补
在某种程度上,Groovy 可以被视为 Java 的一种脚本化改良版,Groovy 也是运行在 JVM 上,它可以很好地与 Java 代码及 其相关库进行交互操作。它是一种成熟的面向对象编程语言,既可以面向对象编程,又可以用作纯粹的脚本语言。大多 数有效的 Java 代码也可以转换为有效的 Groovy 代码,Groovy 和 Java 语言的主要区别是:完成同样的任务所需的 Groovy 代码比 Java 代码更少。其特点为:
在闭包中 , 打印 this , owner , delegate , 打印结果都是闭包所在的类 ;
在闭包中 , 打印 this , owner , delegate , 打印结果都是创建闭包时所在的类 ;
闭包 Closure 提供了 curry , ncurry , rcurry 方法 , 这
闭包 Closure 是 Groovy 中最常用的特性 , 使用闭包作为参数是 Groovy 语言的明显特征 ;
本篇是Typing相关知识的最后一篇。介绍关于类型的闭包和类型推断关系,以及最终的类型静态编译相关知识点。
这一篇开始学习闭包的授权策略等知识点。例如和lambda的区别,闭包的委托delegate,所有owner等作用。
Groovy是一门基于JVM的动态语言,很多语法和Java类似。大部分Java代码也同时是合法的Groovy代码。本文是快速入门,所以针对语法并不会做非常详细的介绍。如果需要详细语法,请直接查看Groovy官方文档。另外为了省事,本文中的大部分代码例子直接引用了Groovy文档。
一、报错信息 在使用 Groovy 闭包时 , 会报如下错误 : Exception in thread "main" groovy.lang.MissingMethodException: No signature of method: Test$_main_closure3.call() is applicable for argument types: (java.lang.String) values: [Hello] Possible solutions: doCall(), any(), any
Gradle简介 Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建工具,gradle跟ant、maven一样,是一种依赖管理、自动化构建工具。但跟ant、maven不一样的是,它并没有使用xml语言,而是采用了Groovy语言,这使得它更加简洁、灵活,更加强大的是,gradle完全兼容maven和ivy。详细介绍可以查看官网的介绍:http://www.gradle.org/ Gradle入门 在学习Gradle之前,先看一下Groovy的介绍。 Groovy安装 G
本人20年硕士毕业于广东工业大学,于2020年6月加入37手游安卓团队;目前主要负责海外游戏发行安卓相关开发。
本篇内容为Groovy学习笔记第26篇。相关知识为Groovy中的闭包使用。Groovy中的闭包是一个开放的、匿名的代码块,它可以接受参数、返回值并被分配给变量。闭包可以引用在其周围作用域中声明的变量。与闭包的正式定义相反,Groovy语言中的闭包还可以包含在其周围作用域之外定义的自由变量。虽然打破了闭包的正式概念,但它提供了本章所述的各种优点。
到目前为止,我们已经看到了很多Gradle构建的属性,并且知道了怎么去执行Tasks。这一章,会更多的了解这些属性,并且创建我们自己的Task。一旦知道如何自定义Task之后,就可以完成更多的事情,并且自定义自己的插件,而在多工程中使用这些Task和Plugin。
In Groovy number types are considered equal to any other types. As such, it is possible to enhance numbers by adding properties or methods to them. This can be very handy when dealing with measurable quantities for example. Details about how existing classes can be enhanced in Groovy are found in the extension modules section or the categories section.
之前分享过Groovy中的闭包,在我日常的工作中,就会想到一个问题:“如何在Groovy中使用Java方法?”
输入gradle wrapper命令会在当前目录创建安装一个jar包(用于下载真正的gradle descirbe,jar很小)和脚本:
简单地说,Groovy 是下一代的java语言,跟java一样,它也执行在 JVM 中。
Groovy是一种基于Java平台的动态编程语言,它结合了Python、Ruby和Smalltalk等语言的特性,同时与Java无缝集成。在本篇博客中,我们将探讨Groovy与Java之间的联系与区别,深入了解Groovy的语法,并展示如何在Java中使用GroovyShell来运行Groovy脚本。
在 Groovy 脚本中 , 在 Closure 闭包中 , 可以直接调用 Groovy 脚本中定义的方法 ;
task:构建脚本定义一个任务,并取名。doLast:构建脚本给任务添加一个动作Action,在task执行完毕后,要回调doLast这部分闭包的业务代码逻辑或者叫回调实现。
接上文 《从 Java 和 JavaScript 来学习 Haskell 和 Groovy(引子)》。
Groovy 为 Number 类实现的注入函数 , 也能实现循环 , 通过向注入的函数传入闭包参数 , 即可实现循环操作 ;
为什么需要插件扩展?插件内部执行任务的时候需要依赖外界脚本传入的值进行相对应的构建。
实际上,一个项目是什么取决于你要用 Gradle 做什么?项目通常代表的是构建内容。 例如在 Android 中,一个 module 就是一个项目;
1.Gradle是基于JVM的,所以首先需要确保已经安装好了JDK,而我这里是已经安装好的了,官方文档中表示目前最新版本的Gradle需要的JDK环境是1.7以上。我这里用的是jdk10:
Gradle 作为官方主推的构建系统,目前已经深度应用于 Android 的多个技术体系中,例如组件化开发、产物构建、单元测试等。可见,要成为 Android 高级工程师 Gradle 是必须掌握的知识点。在这篇文章里,我将带你由浅入深建立 Gradle 的基本概念,涉及 Gradle 生命周期、Project、Task 等知识点,这些内容也是 Gradle 在面试八股文中容易遇见的问题。
分别在 Groovy 脚本 和 Test 类中定义 fun 方法 , 打印不同的内容 ;
虽然放弃了通篇学习一整门语言,但是为了在声明式流水线中使用简单的逻辑操作还是需要学习一点Groovy的基础内容。
面我们提到线程池处理批量接口请求实践但是在语法上比较复杂,还需要进行线程间的同步,也需要一定的Java知识,最近在学习Golang语言时,感觉go关键字十分高效,只要是想异步执行的方法,只需在前面添加go关键字即可。
gradle执行的最小单元是task任务,任何无主函数都可以在Project中找到
领取专属 10元无门槛券
手把手带您无忧上云