【Groovy】Groovy环境搭建

news/2025/10/1 22:29:36/文章来源:https://www.cnblogs.com/zhyan8/p/19122988

1 前言

​ Groovy 是一种基于 JVM 平台的敏捷且动态的编程语言,能与 Java 无缝集成。该语言由 James Stracham 和 Bob McWhirter 于 2003 年启动开发,在 2007 年 1 月发布第一个版本。

​ Groovy 具有以下优势。

  • 简洁优雅的语法:Groovy 的语法比 Java 更加简洁,省略了繁琐的代码结构,例如分号、类型声明等,让开发者更专注于业务逻辑的实现。
  • 动态类型:Groovy 是动态类型语言,无需显式声明变量类型,编译器会在运行时自动推断类型,提高了代码的灵活性和开发效率。
  • 强大的闭包支持:闭包是 Groovy 的一大特色,它可以将代码块作为参数传递,简化了代码结构,提升了代码的可读性和可维护性。
  • 与 Java 无缝集成:Groovy 与 Java 完全兼容,可以直接使用 Java 类库,也可以将 Groovy 代码编译成 Java 字节码,运行在 JVM 上。
  • 丰富的生态系统:Groovy 拥有丰富的生态系统,包括 Grails 框架、Gradle 构建工具等,为各种应用场景提供了强大的支持。

​ Groovy 相关资料如下。

  • Groovy 官网:https://groovy-lang.org/
  • Groovy 官方文档:https://groovy-lang.org/documentation.html
  • groovy-sdk 下载:https://groovy.apache.org/download.html
  • Groovy GitHub:https://github.com/apache/groovy

2 搭建 Groovy 环境

1)配置环境变量

​ 下载 groovy-sdk:apache-groovy-sdk-4.0.25.zip,放在路径中无空格的英文目录下(笔者放在【D:\Android\Groovy】目录下),解压后,在【系统 → 系统信息 → 高级系统设置 → 环境变量 → 系统变量 → Path】中配置环境变量,将以下路径添加到 Path 中。

D:\Android\Groovy\groovy-4.0.25\bin

​ 配置完环境变量后,在 cmd 窗口输入 groovy -version、groovyc -version,如果正确打印 groovy 版本号,说明环境变量配置成功,如下。

img

2)编译 Groovy 代码

​ 使用记事本编写以下代码,并保存为 Test.groovy 文件。

println("Hello world!")

​ 使用以下命令可以编译 Groovy 代码为字节码,生成 Test.class 文件。

groovyc Test.groovy

​ 使用以下命令运行程序。

groovy Test.groovy

img

3)Groovy Console

​ 在【 groovy-sdk/bin】目录下,双击 groovyConsole.bat 文件(笔者路径如下),即可打开 Groovy 控制台。

D:\Android\Groovy\groovy-4.0.25\bin\groovyConsole.bat

​ Groovy 控制台页面如下,在控制台中可以编写代码,点击【Script / Run】(或按快捷键 Ctrl + R)即可运行代码。按快捷键【Ctrl + Shift + L】和【Ctrl + Shift + S】分别可以放大和缩小工作区界面。

img

​ 在 Android Studio 中,可以点击【Tools / Groovy Console】打开 Groovy 控制台,页面如下。

img

3 脚本执行原理

​ Groovy 是面向对象编程语言,对于以下脚本,Groovy 会将其封装到一个类中。

println("Hello World")

​ 如下,Groovy 会生成 Main 类继承 Script,并将脚本的主体复制到 run 方法中,在 main 方法中执行 run 方法。

import org.codehaus.groovy.runtime.InvokerHelperclass Main extends Script {def run() {println("Hello World")}static void main(String[] args) {InvokerHelper.runScript(Main, args)}
}

4 拓展

4.1 Java 文件改后缀名为 Groovy 文件

​ 编写以下 Java 代码,文件名为 Test.java,使用 java Test.java 命令可以运行代码。

public class Test {public static void main(String[] args) {System.out.println("Hello World!");}
}

​ 如果将文件后缀名由 java 改为 groovy,使用 groovy Test.groovy 命令仍然可以运行代码,如下,由此也说明 Groovy 兼容 Java。

img

4.2 Groovy 简化 java.lang.process

​ 假设本地安装了 Git,现在想在代码中执行 “git help”,java 的写法如下。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;public class ExecuteProcess {public static void main(String[] args) {try {Process process = Runtime.getRuntime().exec("git help");BufferedReader bf = new BufferedReader(new InputStreamReader(process.getInputStream()));String line;while((line = bf.readLine()) != null) {System.out.println(line);}} catch (IOException e) {e.printStackTrace();}}
}

​ Groovy 中的实现如下,可以看到 Groovy 扩展了 JDK,极大简化了代码。

println "git help".execute().text

​ 声明:本文转自【Groovy】Groovy环境搭建。

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

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

相关文章

php 网站 发布优对 网站开发

摘要:沈海军:今天(2019年4月10日)下午接受广东卫视采访,就晚上21:00即将发布的人类首张黑洞照片发表了评论。提笔撰稿时,尚未到照片官方的发布时间,故不能一睹黑洞照片的芳容,但鉴于…

做网站分页垦利网站定制

# -*- coding: utf-8 -*- z0 def numbersize(a,b):global zif(a>b):zaelif(a<b):zbelif(ab):zaelse:z99return z

2025年TAB拉链制造商权威推荐榜:创新设计与耐用品质口碑

2025年TAB拉链制造商权威推荐榜:创新设计与耐用品质口碑 在纺织辅料行业快速发展的今天,TAB拉链作为功能性与装饰性并重的重要配件,其技术创新与品质标准已成为衡量制造商实力的关键指标。随着新材料应用与智能制造…

变量类型

isinstance() isinstance(object, classinfo) 是一个 Python 内置函数,用于判断一个对象 (object) 是否是某个类或其子类的实例,或者是否属于 classinfo 参数指定的类型或元组中的一种类型。它返回 True 或 False,并…

VMware Cloud Foundation 9.0.1.0 发布 - 领先的多云平台

高效管理虚拟机 (VM) 和容器工作负载,为本地部署的全栈超融合基础架构 (HCI) 提供云的优势。VMware Cloud Foundation 9.0.1.0 发布 - 领先的多云平台 高效管理虚拟机 (VM) 和容器工作负载,为本地部署的全栈超融合基…

velero 备份及使用方法

1、安装velero wget https://github.com/vmware-tanzu/velero/releases/download/v1.17.0/velero-v1.17.0-linux-amd64.tar.gz tar -xzf velero-v1.17.0-linux-amd64.tar.gz cd velero-v1.17.0-linux-amd64 cp velero…

CT5132 Program. Tools for AI:-week4 note

CT5132 Program. & Tools for AI:-week4 noteNumpy: Multidimensional Arrays and Fancy Indexing 标题解析:NumPy: Multidimensional Arrays and Fancy Indexing 🧠 NumPy 是什么? NumPy(Numerical Python)…

Fluttercon EU 2025 :Let‘s go far with Flutter - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

洛谷月赛T1 P14081 「CZOI-R7」炸弹游戏

洛谷月赛T1 P14081 「CZOI-R7」炸弹游戏竟然做了一晚上才AC 发题解警示自己犯糖 一道思维题,推公式即可首先手玩一下样例发现 m=1,m=2均无法成功,直接输出 如果大于2一定存在范围[L,R]可以胜利 对于最小值,不难想…

io的异步处理io_uring,实现io_uring_tcp_server - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

网络舆情应对措施seo推广教程seo推广技巧

1、什么是多态性&#xff1f;什么是虚拟方法调用&#xff1f; 对象的多态性&#xff1a; Person p new xx(); 此时new的对象可以为多种形态&#xff0c;但需要是person类的子类。即父类的引用指向子类的对象。 虚拟方法调用: p.eat(); 该语句在编译时会认为时调用Person类中的…

VMware NSX 4.2.3.1 发布,新增功能概览

VMware NSX 4.2.3.1 - 网络安全虚拟化平台VMware NSX 4.2.3.1 发布,新增功能概览 VMware NSX 4.2.3.1 - 网络安全虚拟化平台 构建具有网络连接和安全性的云智能网络,跨多种云环境支持一致的策略、运维和自动化。 请访…

Claude Code V2集成KAT-Coder

Claude Code V2集成KAT-CoderClaude Code V2安装Anthropic于2025年9月29日正式发布了Claude Code的重大版本更新(v2.0),并推出了Claude Sonnet 4.5模型。Anthropic是一家人工智能公司,由OpenAI前员工创立,致力于开…

用wordpress做微站企业网站 jquery

多重继承派生类 除去一个类从一个基类派生&#xff0c;C还支持一个派生类同时继承多个基类 MI&#xff1a;有多个直接基类的类 1.多重继承派生类的定义 如果已经定义了多个基类&#xff0c;那么定义多重继承的派生类的形式为&#xff1a; class 派生类名:访问标号1 基类名…

Ceph 分布式存储学习笔记(一):介绍、部署与集群设置(上)

Ceph 分布式存储学习笔记(一):介绍、部署与集群设置(上)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Cons…

不让在建设门户网站wordpress 无法将上传的文件移动至

DP——动态规划 动态规划算法动态规划的一般步骤特殊DP——背包0-1背包问题完全背包问题 总结 动态规划算法 当涉及到解决具有重叠子问题的优化问题时&#xff0c;动态规划是一种常用的算法技术。它通过将问题分解为一系列重叠子问题&#xff0c;并使用递归或迭代的方式来解决…

VMware Aria Suite Lifecycle 8.18 Patch 5 发布,新增功能概览

VMware Aria Suite Lifecycle 8.18 Patch 5 发布,新增功能概览VMware Aria Suite Lifecycle 8.18 Patch 5 发布,新增功能概览 VMware Aria Suite Lifecycle 8.18 - 应用生命周期管理 请访问原文链接:https://sysin.…

阿里云的国际网站建设中山市企业网站seo哪家好

更新&#xff1a; 在上一篇文章中&#xff0c;我们介绍了如何聚合SDK的基本原理&#xff0c;介绍了聚合SDK的接口设计&#xff0c;那么当CP接入了我们的聚合SDK&#xff0c;给了我们游戏apk包时&#xff0c;这时我们又当如何分发渠道包呢&#xff1f; 分发渠道包&#xff1a;…

P3977 [TJOI2015] 棋盘题解

题目描述 有个 \(n\) 行 \(m\) 列的棋盘,棋盘上可以放许多棋子。每个棋子的攻击范围是 \(3\) 行 \(p\) 列。输入数据用一个 \(3\times p\) 的矩阵给出了棋子攻击范围的模板,棋子被默认为模板中的第 \(2\) 行,第 \(k…

申请建设门户网站的申请电子商务网站建设 试卷

前言 中篇讲了进程为什么要有优先级&#xff0c;以及环境变量和通过代码获得环境变量 本篇主要讲解什么是地址空间 &#xff0c; 地址空间是怎么设计的&#xff1f;为什么要有地址空间&#xff1f; 程序地址空间 先看下图 验证上图的正文代码至堆的地址是不是从低地址向高地…