Groovy 初学者脚本教程

⚡ 智能摘要

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

  • 🧩 Java 兼容: 有效 Java 代码编译后保持不变 Groovy因此,学习成本非常低。
  • Less 样板: 一行 println 语句即可替换类、main 方法和 System.out 调用。 Java 需要。
  • 🔀 动态类型ping: def 关键字允许一个变量在运行时保存一个整数和一个字符串。
  • 🔁 紧凑型环路: upto、times 和 step 方法用一行代码取代了冗长的 C 风格 for 循环。
  • 📦 原生收藏: 列表和映射具有字面语法以及诸如 pop、keySet 和 sort 之类的辅助函数。
  • 🧠 关闭时间: 代码块充当对象,接受参数,返回值,并嵌套在其他闭包中。
  • ⚙️ 三种工具: groovysh 提供 shell,groovyConsole 提供 GUI,而 groovy 直接运行脚本文件。

Groovy 初学者脚本教程

什么是 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 下载页面及安装程序链接

注意:您还可以安装 Groovy 您可以从二进制 Zip 文件下载,也可以通过 SDKMAN!、Homebrew、Scoop 或 Chocolatey 等包管理器下载,或者作为插件安装到您的设备上。 Java IDE。在这 Groovy 我们将按照以下步骤进行操作。 Windows 安装程序。

步骤3) 启动下载的安装程序。选择语言,然后单击“确定”。

Groovy 安装程序语言选择对话框

步骤4) 在欢迎屏幕上,点击“下一步”。

Groovy 安装程序欢迎屏幕

步骤5) 同意许可条款。

Groovy 安装程序许可协议屏幕

步骤6) 选择要安装的组件,然后单击“下一步”。

Groovy 安装程序组件选择屏幕

步骤7) 选择安装目录,然后单击“下一步”。

Groovy 安装程序安装目录屏幕

步骤8) 选择“开始菜单”文件夹,然后单击“下一步”。

Groovy 安装程序开始菜单文件夹屏幕

步骤9) 安装完成后,保持路径默认设置,然后单击“下一步”。

Groovy 安装程序环境路径屏幕

步骤10) 确认文件关联选项,然后单击“下一步”。

Groovy 安装程序文件关联屏幕

步骤11) 在“开始”菜单中,搜索 Groovy 通过控制台确认安装。

开始菜单搜索显示 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, intlong 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, collectfindAll 工作。

Groovy 工具

我们将介绍随附的三个重要工具。 Groovy 分配:

  1. groovysh: 通过命令行以交互方式执行代码。
  2. groovyConsole: 用于交互式代码执行的图形窗口。
  3. 很棒: 执行 Groovy 脚本文件,就像你运行 Perl 或 Python 脚本。

Groovysh

  • 命令行 shell。
  • 帮助你执行 Groovy 交互式编码。
  • 允许您输入单个语句或整个脚本。

下面的屏幕截图显示了 groovysh 逐行评估表达式的过程。

groovysh 命令行 shell 运行 Groovy 声明

Groovy 安慰

  • 一个充当最小功能的 Swing 界面 Groovy 开发编辑器。
  • 允许您编写和运行 Groovy 交互式编码。
  • 帮助您加载和运行 Groovy 脚本文件。

在 Groovy 在下方的控制台中,脚本在上窗格中输入,结果显示在下窗格中。

Groovy 带有脚本和输出窗格的控制台 Swing 编辑器

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 测试套件。

常见问题

Groovy 5.0 版本面向 JDK 11 及以上版本。 Groovy 4.0 版本仍然支持 JDK 8,以及正在进行中的开发工作。 Groovy 6.0 版本针对 JDK 17。在确定版本之前,请查看 Apache 官方下载页面上的系统要求表。

不。groovy 命令会将 .groovy 文件编译成内存中的字节码并立即运行。如果您需要将可重用的 .class 文件打包到项目中,仍然可以使用 groovyc 提前编译。 Java 应用程序。

是的。Apache。 Groovy 本软件以 Apache License 2.0 许可发布,因此允许免费进行商业用途、修改和再分发。再分发的版本仅需遵守通常的署名和许可声明义务。

Groovy Grails 是一种编程语言,它是一个用 Grails 编写的全栈 Web 框架。 Groovy。 您可以使用 Groovy 对于构建文件、流水线或测试,无需安装 Grails,但 Grails 本身也离不开它。 Groovy.

它们能很好地处理闭包、集合方法和管道步骤等常见用法。务必先在 Groovy 控制台中运行生成的脚本,因为模型有时会混淆。 Java 语法 Groovy 走捷径或者发明不存在的方法。

粘贴堆栈 trace 和脚本被导入助手,以找出可能的原因,例如 Groovy可能是 CastException 异常、缺少沙箱批准或闭包委托错误。请将每条建议都视为假设,并与实际构建日志进行比对验证。

总结一下这篇文章: