Groovy 初学者脚本教程
⚡ 智能摘要
Groovy 脚本是一种面向对象的语言,用于…… Java 编译成 JVM 字节码的平台。它添加了动态类型ping闭包和简洁的语法 Java它为 Jenkins 管道 Gradle 建造,以及 SoapUI 断言。

什么是 Groovy 脚本?
Apache (阿帕奇) Groovy 是一个面向对象的, Java 专为以下用途而设计的语法兼容编程语言 Java 平台。这种动态语言具有许多与平台类似的特性。 PythonRuby、Smalltalk 和 Perl。 Groovy 源代码被编译成 Java 因此它可以在任何平台上运行,只要它支持字节码即可。 Java 虚拟机已安装。 Groovy 它还在幕后做了大量工作,这使得它比普通服务器感觉更灵活、更动态。 Java.
A Groovy 脚本 只是一个 .groovy 文件包含以下语句 Groovy 它会在运行前包装在一个生成的类中。这就是为什么你可以执行一行文件而无需编写类或代码的原因。 main 方法。 Groovy 因此,它可以作为脚本语言使用。 Java 平台,同时仍然提供企业级功能 Java它增加了诸如 DSL 支持、闭合和可选动态类型等生产力功能。ping与其他一些语言不同,它的设计初衷是作为……的辅助工具。 Java,而不是替代品。
💡提示: Groovy 5.0 是当前稳定的版本系列,目标版本为 JDK 11 及以上。 Groovy 4.0 版本仍然适用于 JDK 8 项目,并且 Groovy 6.0 版本目前仍处于 JDK 17 的 alpha 测试阶段。在选择版本之前,请务必查看官方下载页面上的系统要求表。
Groovy?
以下是您应该使用和学习的主要原因 Groovy:
- Groovy 是一种灵活且充满活力的语言。
- 它能与所有现有系统无缝集成。 Java 对象和库。
- 感觉轻松自然 Java 开发人员。
- 这段代码比等效代码更简洁、更有意义。 Java 码。
- 你可以根据需要随意使用。 Java 领域广泛应用,提供了卓越的解决方案。
- 它运行在标准平台上 Java 虚拟机因此,无需单独的运行时环境。
Groovy 历史
- 2003年: 由 James S 发起trac韩和鲍勃·麦克Whirter。
- 2004年: 提交至 Java 社区进程作为 JSR 241,后来被撤回。
- 2005年: 重新带回 trac由 Jeremy Rayner 和 Guillaume Laforge 创作。
- 2007年: Groovy 1.0个发布。
- 2012年: Groovy 2.0个发布。
- 2014年: Groovy 2.3 版本正式发布,支持 JDK 8。
- 2015年: Groovy 成为 Apache 软件中心的顶级项目 Foundation.
- 2022年: Groovy 4.0 版本发布,Maven 坐标已迁移至
org.apache.groovy. - 2025年: Groovy 5.0 版本已发布,支持 JDK 11 及以上版本。
特点 Groovy
- 列表、映射、范围和正则表达式字面量。
- 多方法(运行时方法分派)和元编程。
- Groovy 类和脚本通常存储在
.groovy文件。 - 脚本包含 Groovy 没有任何类声明的语句。
- 脚本还可以包含类定义之外的方法定义。
- Groovy 代码可以编译并与传统系统完全集成。 Java 应用程序。
- 语言层面支持地图、列表和正则表达式。
- 支持闭包、动态类型ping以及元对象协议。
- 支持静态和动态类型ping加上运算符过载。
- 可选的静态类型检查
@TypeChecked和@CompileStatic注释。
如何安装 Groovy
步骤1) 确保你有 Java 安装.
步骤2) 在MyCAD中点击 软件更新 https://groovy.apache.org/download.html 并单击 Windows 安装链接。
注意:您还可以安装 Groovy 您可以从二进制 Zip 文件下载,也可以通过 SDKMAN!、Homebrew、Scoop 或 Chocolatey 等包管理器下载,或者作为插件安装到您的设备上。 Java IDE。在这 Groovy 我们将按照以下步骤进行操作。 Windows 安装程序。
步骤3) 启动下载的安装程序。选择语言,然后单击“确定”。
步骤4) 在欢迎屏幕上,点击“下一步”。
步骤5) 同意许可条款。
步骤6) 选择要安装的组件,然后单击“下一步”。
步骤7) 选择安装目录,然后单击“下一步”。
步骤8) 选择“开始菜单”文件夹,然后单击“下一步”。
步骤9) 安装完成后,保持路径默认设置,然后单击“下一步”。
步骤10) 确认文件关联选项,然后单击“下一步”。
步骤11) 在“开始”菜单中,搜索 Groovy 通过控制台确认安装。
⚠️警告: 此 Windows 安装程序是社区贡献的成果,并非 Apache 官方版本。如果您的组织需要经过签名的 Apache 下载,请使用二进制 Zip 分发包并验证其完整性。 .asc 签名和 .sha256 改为计算校验和。
Groovy 你好世界的例子
假设你想在文本框中打印简单的字符串“Hello World”。 Java代码如下所示。
public class Demo {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
输出:
Hello World
上述代码在两种情况下均有效 Java 和 Groovy因为 Groovy 接受几乎所有 Java 语法优势 Groovy 这样一来,你就可以省去类声明、公共方法和完整的打印调用,用一行代码就能达到同样的效果。
println "Hello World"
输出:
Hello World
- 不需要分号。
- 无需上课或
main方法。 System.out.println减少到println.
Groovy 变量
In Java静态绑定是强制性的,这意味着必须预先声明变量的类型。
public class Demo {
public static void main(String[] args) {
int x = 104;
System.out.println(x);
//x = "Guru99";
}
}
输出:
104
在上面的例子中,变量的类型是使用关键字预先声明的。 int如果要声明一个浮点数,则需要使用关键字。 float or double.
如果您尝试将字符串值赋给一个 int (取消注释第 5 行),您将收到以下编译错误。
Demo.java:5: error: incompatible types: String cannot be converted to int x = "Guru99";
相反, Groovy 支持动态类型ping变量使用关键字定义。 def而且,类型无需预先声明。运行时会自动确定变量类型,你甚至可以稍后更改该类型。
def x = 104 println x.getClass() x = "Guru99" println x.getClass()
输出:
class java.lang.Integer class java.lang.String
In Groovy 你也可以创建多行字符串。只需确保将字符串用三引号括起来即可。
def x = """Groovy at Guru99""" println x
输出:
Groovy at Guru99
注意: 您仍然可以使用显式类型,例如 byte, short, int和 long in Groovy但是,一旦你显式地声明了类型,就无法动态地更改它。
int x = 104 println x x = "Guru99"
输出:
104
Caught: org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'Guru99' with class 'java.lang.String' to class 'int'
org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'Guru99' with class 'java.lang.String' to class 'int'
at jdoodle.run(jdoodle.groovy:3)
Command exited with non-zero status 1
Groovy Opera职权范围
运算符是一个符号,它告诉编译器执行特定的数学或逻辑运算。 Groovy 支持以下五类运算符。
- 算术运算符: 添加(+),删除tract(-),乘(*),除(/),取模(%),加(++),减(–)。
- 关系运算符: 等于(==),不等于(!=),小于(<),小于或等于(<=),大于(>),大于或等于(>=)。
- 逻辑运算符: 且(&&),或(||),非(!)。
- 按位运算符: 与(&),或(|),异或(^),补集(~)。
- 赋值运算符: 赋值(=)和复合形式(+=)、(-=)、(*=)、(/=)、(%=)。
Groovy 添加了一些运算符 Java 没有,而且它们删除了大量空值检查样板代码。
| Opera器 | 描述 |
|---|---|
| ?. | 安全导航。当左侧为空时,返回 null 而不是抛出 NullPointerException。 |
| ?: | Elvis 运算符。如果左侧为真,则返回左侧;否则返回右侧。 |
| <=> | 飞船操作符。委托给 compareTo 函数,在排序闭包中很有用。 |
| ==~ | 正则表达式匹配。仅当整个字符串与模式完全匹配时才返回 true。 |
Groovy
In Java您可以按如下方式定义计数循环。
public class Demo {
public static void main(String[] args) {
for (int x = 0; x <= 5; x++) {
System.out.println(x);
}
}
}
输出:
0 1 2 3 4 5
您可以在以下位置实现相同的输出 Groovy 与 upto 该方法包含了这两个界限。
0.upto(5) { println "$it" }
输出:
0 1 2 3 4 5
服务 it 是闭包的隐式参数,它保存着当前迭代的值。请看以下代码。
2.upto(4) { println "$it" }
输出:
2 3 4
您也可以使用 times 该方法总是从 0 开始,并且比你调用的数字少 1,所以你需要 6 才能打印出 0 到 5。
6.times { println "$it" }
输出:
0 1 2 3 4 5
现在假设你想用一个按钮打印出 0、2 和 4。 Java for循环.
public class Demo {
public static void main(String[] args) {
for (int x = 0; x <= 5; x=x+2) {
System.out.println(x);
}
}
}
输出:
0 2 4
您可以使用 step 另一种方法也能得到相同的结果。第二个参数是增量,第一个参数是互斥上限。
0.step(5, 2) { println "$it" }
输出:
0 2 4
Groovy 决策
Groovy 重复使用 Java 条件语句增加了一个更加灵活的功能。 switch下表总结了各种选项。
| 个人陈述 | 描述 |
|---|---|
| 如果声明 | 如在 Java当条件为真时,if 语句的主体部分将被执行。 |
| if/else语句 | 首先评估 if 语句中的条件。如果条件为真,则执行 if 代码块中的语句,并跳过 else 代码块。如果条件为假,则执行 else 代码块中的语句。 |
| 嵌套 if 语句 | 当您需要在 if 代码块内测试其他条件时,可以使用此方法。 |
| 开关语句 | 当条件过多时,嵌套的if-else语句链会变得难以阅读。而switch语句则能使同样的逻辑更易于理解。 Groovy案例标签可以是值、类、范围、正则表达式或闭包。 |
| 嵌套 switch 语句 | Groovy 还允许将一个 switch 语句放在另一个 switch 语句内部。 |
Groovy 列表
列表结构允许您存储一组数据项。 Groovy列表(List)保存一系列对象引用,并保留每个元素在该序列中的位置。列表字面量写成一系列用逗号分隔并用方括号括起来的对象。
示例 Groovy 清单:
- 字符串列表:
['Angular', 'Nodejs'] - 混合对象引用列表:
['Groovy', 2, 4, 2.6] - 整数值列表:
[16, 17, 18, 19] - 空列表:
[]
以下列表方法可用 Groovy.
| 付款方式 | 描述 |
|---|---|
| 加() | 在列表末尾添加一个新值。 |
| 包含() | 如果列表包含某个特定值,则返回 true。 |
| 得到() | 返回给定位置的元素。 |
| 是空的() | 如果列表不包含任何元素,则返回 true。 |
| 减() | 创建一个新的列表,其中包含原始列表的元素,但不包括给定集合中指定的元素。 |
| 加() | 创建一个新的列表,该列表由原始列表的元素和给定集合中的元素组成。 |
| 流行音乐() | 从列表中移除最后一个元素并返回它。 |
| 去掉() | 移除指定位置的元素。 |
| 撤销() | 创建一个新列表,该列表的元素与原列表的元素顺序相反。 |
| 尺寸() | 返回列表中的元素数量。 |
| 种类() | 返回列表的排序副本。 |
考虑以下 Groovy 脚本示例。
def y = ["Guru99", "is", "Best", "for", "Groovy"] println y y.add("Learning") println(y.contains("is")) println(y.get(2)) println(y.pop())
输出:
[Guru99, is, Best, for, Groovy] true Best Learning
第一行打印的是原始的五元素列表,因为 add() 尚未运行。 get(2) 返回“最佳”,因为 Groovy 列表的索引从零开始,并且 pop() 返回“学习”,因为该项是最后添加的。
Groovy 地图
A Groovy Map 是键值对的集合。当键只是简单的标识符时,不需要加引号,这使得 Map 字面量非常简洁。
示例 Groovy 地图:
[tutorial: 'Java', language: 'Groovy']是两个键值对的集合。[:]表示一张空白地图。
以下是可用的映射方法列表 Groovy.
| 付款方式 | 描述 |
|---|---|
| 包含键() | 检查映射中是否包含给定的键。 |
| 得到() | 在映射表中查找键值并返回匹配的值。如果找不到匹配项,则返回 null。 |
| 键集() | 返回 Map 中的键集合。 |
| 放() | 将指定的值与给定的键关联起来。如果 Map 中已经包含一个映射。ping 对于该键,旧值将被替换。 |
| 尺寸() | 返回键值映射的数量pings. |
| values() | 返回值的集合视图。 |
Groovy 例:
def y = [fName:'Jen', lName:'Cruise', sex:'F'] print y.get("fName")
输出:
Jen
Groovy 密封产品
A Groovy 闭包是一段封装成对象的代码块。它的行为类似于方法或函数,但可以存储在变量中,并像其他任何值一样传递。
简单闭包示例:
def myClosure = { println "My First Closure" } myClosure()
输出:
My First Closure
闭包可以接受参数。标识符列表以逗号分隔,箭头(->)标记参数列表的结尾。
def myClosure = { a, b, c -> y = a + b + c println y } myClosure(1, 2, 3)
输出:
6
闭包也可以返回一个值。
def myClosure = { a, b, c -> return (a + b + c) } println(myClosure(1, 2, 3))
输出:
6
当您不声明参数列表时, Groovy 提供一个名为的单个隐式参数 it闭包也可以传递给其他闭包,这正是诸如 `callback` 之类的集合方法的工作原理。 each, collect和 findAll 工作。
Groovy 工具
我们将介绍随附的三个重要工具。 Groovy 分配:
- groovysh: 通过命令行以交互方式执行代码。
- groovyConsole: 用于交互式代码执行的图形窗口。
- 很棒: 执行 Groovy 脚本文件,就像你运行 Perl 或 Python 脚本。
Groovysh
- 命令行 shell。
- 帮助你执行 Groovy 交互式编码。
- 允许您输入单个语句或整个脚本。
下面的屏幕截图显示了 groovysh 逐行评估表达式的过程。
Groovy 安慰
- 一个充当最小功能的 Swing 界面 Groovy 开发编辑器。
- 允许您编写和运行 Groovy 交互式编码。
- 帮助您加载和运行 Groovy 脚本文件。
在 Groovy 在下方的控制台中,脚本在上窗格中输入,结果显示在下窗格中。
Groovy
此 groovy 命令是运行的处理器 Groovy 它可以测试程序和脚本。它将源代码编译成内存中的字节码并一步执行,因此无需单独的构建阶段。它还可以用于测试简单的程序和脚本。 Groovy 直接从终端输入表达式,如下所示。
地点 Groovy 已应用于实际项目中
大多数开发者都符合 Groovy 它并非作为一种独立语言,而是作为现有工具内部的脚本层。了解它出现的位置,就能更轻松地理解上面的语法。
| 工具 | 创新中心 Groovy 用来 |
|---|---|
| Jenkins | 声明式和脚本式管道是用以下方式编写的: Groovy DSL 和共享库都是纯粹的 Groovy 类。 |
| Gradle | 经典 build.gradle 文件是一个 Groovy 脚本,这就是为什么它比……更简洁的原因。 Maven的 POM 或 蚂蚁 构建文件。 |
| SoapUI | Groovy 脚本步骤和脚本断言驱动动态请求数据和自定义响应检查。 |
| 斯波克 | A Groovy 测试框架,其 given-when-then 块和数据表被广泛用于 JVM 单元测试。 |
| Elasticsearch 和 Grails | Grails 构建完整的 Web 应用程序 Groovy而且,多种数据工具都接受 Groovy 用于自定义脚本。 |
In 自动化测试 对于团队来说,这一点至关重要,因为它涉及到两方面:运行测试套件的 CI 作业和测试本身都可能受到影响。 Groovy因此,一种语言即可涵盖管道粘合和断言逻辑。
Groovy VS。 Java
| Groovy | Java |
|---|---|
| 默认的访问修饰符是 public,因此没有修饰符的方法可以在其类和包之外访问。 | 默认的访问修饰符是包私有,因此没有修饰符的字段、方法和类仅在其所属的包内可见。 |
| 类属性的getter和setter会自动生成。 | 你需要自己定义字段的getter和setter方法。 |
| Groovy 允许在双引号字符串内进行变量替换。 | Java 不支持字符串插值。 |
| 类型信息为可选信息。 | 类型信息为必填项。 |
| 语句不需要以分号结尾。 | 每句话都以分号结尾。 |
| Groovy 自动将每个脚本包装在生成的 Script 类中。 | 你需要一个 main 方法才能使类可执行。 |
默认情况下,所有内容都是公开且动态的,但是 @CompileStatic 恢复 Java- 控制速度并进行检查。 |
所有代码都经过静态编译,并在构建时进行检查。 |
关于 Groovy
| 误区 | 现实 |
|---|---|
| Groovy 只能用于脚本编写。 | 它非常适合编写脚本,但也可以编译成普通的类,您可以将这些类打包到任何 JVM 应用程序中。 |
| Groovy 它完全围绕闭包展开,所以它就是一种函数式编程语言。 | Groovy 它借鉴了 Lisp 和 Clojure 等函数式语言的思想,但其本质仍然是面向对象的语言。 |
| Groovy 仅对测试驱动开发有价值。 | Groovy 它非常适合 Spock 的 TDD,但这当然不是使用它的唯一原因。 |
| 你只需要 Groovy 如果你想使用 Grails。 | Grails是一个功能强大的Web开发框架,但是 Gradle, Jenkins,斯波克也都使用 Groovy 没有它。 |
使用的缺点 Groovy
- JVM 和 Groovy 脚本启动速度较慢,这限制了它在快速操作系统级脚本编写中的应用。
- Groovy 在以 JVM 为中心的社区之外,并未得到广泛采用。
- 使用起来很不方便 Groovy 如果没有一个能够理解其动态特性的集成开发环境(IDE)。
- 动态调度可以 Groovy 比同等代码运行速度慢的代码 Java 除非您应用代码,否则请应用
@CompileStatic. - Groovy 程序可能需要比普通程序更多的内存。 Java 程式。
- 知识 Java 实际上,这是先决条件。
一旦你感到舒适 Groovy 语法,自然而然的下一步就是围绕它的生态系统。通过以下方式加强基础知识: Java 教程然后看看如何 Groovy 脚本驱动构建和部署 Jenkins比较构建工具 Maven的 和 阿帕奇蚂蚁并探讨如何 Groovy 断言符合 Selenium 以及 API 测试套件。













