【Java】Groovy 语言应用场景以及积累

Groovy 是一种多用途的编程语言,它可以用于多种开发场景。以下是 Groovy 可以用于的一些开发领域和示例:

  1. 脚本编写: Groovy 的简洁语法和强大的动态特性使其成为编写脚本的理想选择。

    def message = "Hello, World!"
    println message
    
  2. Web 开发: Groovy 可以用于编写 Web 应用程序,通常与 Grails 框架结合使用。Grails 是一个基于 Groovy 的 Web 框架,提供了高生产力和简化开发的特性。

  3. 构建工具: Groovy 可以用于编写构建脚本,尤其是在 Apache Groovy 中广泛用于 Apache Maven 和 Gradle 构建工具。

    task hello {doLast {println 'Hello, Gradle!'}
    }
    
  4. 测试脚本: Groovy 可以用于编写测试脚本,例如使用 Spock 框架编写测试用例。

    class MathSpec extends spock.lang.Spec {def "addition"() {expect:2 + 2 == 4}
    }
    
  5. 领域特定语言(DSL): Groovy 的简洁语法和灵活性使其成为编写领域特定语言的理想选择。

    // 用于配置的 DSL
    config {server {host = 'localhost'port = 8080}
    }
    
  6. 数据处理脚本: Groovy 可以用于处理和转换数据,例如处理 JSON 或 XML。

    def json = '{"name": "John", "age": 30, "city": "New York"}'
    def person = new groovy.json.JsonSlurper().parseText(json)
    println "Name: ${person.name}, Age: ${person.age}, City: ${person.city}"
    
  7. 并发编程: Groovy 支持并发编程,可以方便地进行多线程和异步编程。

    def result = []
    def threads = 5(1..threads).each { id ->Thread.start {result << "Thread $id"}
    }Thread.sleep(1000)
    println result.join(', ')
    

这些只是 Groovy 可以应用于的一些场景,由于其灵活性和与 Java 的高度集成,它在多个领域都有广泛的应用。

Groovy 语言有一些特点,使其在脚本编写和与 Java 交互等方面更加灵活。以下是 Groovy 语言的一些写作特点:

  1. 动态类型: Groovy 是一种动态类型的语言,不需要显式声明变量的类型。变量的类型会在运行时根据赋给它的值确定。

    def message = "Hello, World!"
    
  2. 简洁的语法: Groovy 的语法更加简洁,与 Java 相比,代码行数更少。例如,没有类型声明、分号等。

    def numbers = [1, 2, 3, 4, 5]
    numbers.each { println it }
    
  3. 字符串插值: Groovy 支持在字符串中插入变量的值,使字符串拼接更加方便。

    def name = "John"
    println "Hello, $name!"
    
  4. 闭包: Groovy 中的闭包是一种强大的特性,允许将代码块作为参数传递给方法或赋值给变量。

    def multiply = { x, y -> x * y }
    println multiply(3, 4)
    
  5. 集合操作: Groovy 提供了丰富的集合操作,如 eachcollectfindAll 等,使对集合的处理更加方便。

    def numbers = [1, 2, 3, 4, 5]
    numbers.each { println it }
    
  6. 运算符重载: Groovy 允许运算符重载,使用户可以定义自己的运算符行为。

    class MyNumber {def valueMyNumber(int value) {this.value = value}def plus(MyNumber other) {return new MyNumber(this.value + other.value)}
    }def a = new MyNumber(3)
    def b = new MyNumber(4)
    def result = a + b
    
  7. 元编程: Groovy 支持元编程,允许在运行时修改类和对象的结构,添加方法等。

    class MyClass {def myMethod() {println "Original method"}
    }def myInstance = new MyClass()
    myInstance.myMethod()// 动态添加方法
    MyClass.metaClass.newMethod = { println "Dynamically added method" }
    myInstance.newMethod()
    
  8. 与 Java 互操作性: Groovy 与 Java 代码无缝集成,可以直接使用 Java 类和库,也可以将 Groovy 代码编译成 Java 字节码。

这些特点使 Groovy 成为一种适用于快速开发、简洁代码和与 Java 生态系统无缝集成的脚本语言。

Groovy 是一种基于 Java 平台的脚本语言,它继承了 Java 的语法并添加了许多方便的特性。以下是一些 Groovy 语言中常见的函数和特性:

  1. print 和 println 函数:

    print "Hello, World!"
    println "Hello, World!"
    
  2. 字符串插值:

    def name = "John"
    println "Hello, $name!"
    
  3. 集合操作:

    def list = [1, 2, 3, 4, 5]
    list.each { println it }
    
  4. 闭包(Closures):

    def multiply = { x, y -> x * y }
    println multiply(3, 4)
    
  5. Groovy 语法的 Map 和 List:

    def person = [name: 'John', age: 30]
    println person.namedef numbers = [1, 2, 3, 4, 5]
    println numbers[2]
    
  6. 字符串操作:

    def text = "Groovy is awesome!"
    println text.toUpperCase()
    println text.contains("is")
    
  7. 条件语句:

    def x = 10
    if (x > 5) {println "x is greater than 5"
    } else {println "x is not greater than 5"
    }
    
  8. 循环语句:

    for (i in 1..5) {println i
    }
    
  9. 文件操作:

    def file = new File("/path/to/file.txt")
    file.eachLine { line -> println line }
    
  10. 异常处理:

try {// 一些可能会抛出异常的代码
} catch (Exception e) {println "An error occurred: ${e.message}"
}

这只是 Groovy 语言的一小部分功能。Groovy 还支持更多高级的特性,如元编程、DSL(领域特定语言)等。详细信息可以查阅 Groovy 官方文档。

举例子使用

这是一个使用 Groovy 语言编写的 Jenkins Pipeline 脚本,用于执行 CMP(Communication Platform)的日常测试任务。以下是脚本的一些关键部分:

  1. 导入库和插件:

  2. 类定义:

    @Library('AppsAutomationPipelineShareLib') _
    class CMPDailyRunExecutor<T extends CMPDailyParams> extends RoomsDailyRunExecutor<T> {// ...
    }
    
  3. postBuild 方法:

    @Override
    def postBuild() {jenkins.stepUtil.postBuildArchive()jenkins.stepUtil.postBuildReportsPublish()jenkins.sh("rm -fr  ${jenkins.WORKSPACE}/target/cucumber-html-reports/cucumber_screenshots")
    }
    
  4. afterInitParams 方法:

    @Override
    void afterInitParams(Params params) {// ...
    }
    
  5. execute 方法:

    @Override
    def execute() {jenkins.stage('Run cases') { firstRunCase() }if (jenkins.stepUtil.checkIfExistsRerun()) {context.setBuildResult(ResultEnum.FAILURE)}
    }
    
  6. finished 方法:

    @Override
    def finished() {super.finished()sendNotification()
    }
    
  7. sendNotification 方法:

    void sendNotification() {sendNotificationToTriggerUser(RoomsJobs.glipTeamInfo.CMPJobNotification, getFailedMessage())
    }
    
  8. getFailedMessage 方法:

    String getFailedMessage() {// ...
    }
    
  9. CMPDailyParams 类:

    class CMPDailyParams extends RoomsDailyParams {// ...
    }
    
  10. Pipeline 节点:

    node(buildNode) {new CMPDailyRunExecutor(jenkins: this).run()
    }
    

主要用于执行 CMP 的日常测试任务,包括构建、测试执行和通知。在脚本中,你可以看到使用了 Jenkins 的一些内置方法,以及定义了一些自定义的方法来处理构建和测试过程。

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

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

相关文章

7-sqlalchemy快速使用和原生操作、增删查改、增加和基于对象的跨表查询、scoped线程安全、g对象、基本增查改和高级查询

1 sqlalchemy快速使用 2 sqlalchemy原生操作 3 sqlalchemy操作表 3.2 基本增删查改 4 一对多关系 4.1 关系建立 4.2 增加和基于对象的跨表查询 5 多对多关系 5.2 增加和基于对象跨表查 6 scoped线程安全 7 g对象 8 基本增查改 7 常用查询 1 sqlalchemy快速使用 1.1 介绍 # …

什么是数字化工厂?企业数字化转型有什么好处?

科技在发展&#xff0c;时代在进步&#xff0c;全球信息化、数字化的步伐越来越快&#xff0c;数字化转型是否成功也成为企业在未来发展中能否做大做强的关键因素。而数字化工厂就是制造业数字化发展的一个重要发展方向&#xff0c;那么究竟什么是数字化工厂呢&#xff1f;它和…

Linux | 进程间通信

目录 前言 一、进程间通信的基本概念 二、管道 1、管道的基本概念 2、匿名管道 &#xff08;1&#xff09;原理 &#xff08;2&#xff09;测试代码 &#xff08;3&#xff09;读写控制相关问题 a、读端关闭 b、写端关闭 c、读快写慢 d、读慢些快 &#xff08;4&a…

Unity下载资源且保存

UnityWebRequest(WWW——已过时) 替代&#xff1a;Unity不再支持WWW后&#xff0c;使用UnityWebRequest完成web请求。 Unity - Scripting API: UnityWebRequest (unity3d.com)https://docs.unity3d.com/ScriptReference/Networking.UnityWebRequest.html if (www.isNetworkEr…

GPT-4:论文阅读笔记

GPT-4的输入和输出&#xff1a;输入的内容是文本或图片&#xff0c;输出的内容是文本。因此&#xff0c;GPT-4是一种输入端多模态的模型。GPT-4的效果&#xff1a;在真实世界中还是比不上人类&#xff0c;但是在很多专业性的任务上已经达到了人类的水平&#xff0c;甚至超过人类…

mongdb 删除重复的数据,并保留其中一条

脚本如下,将下面集合与字段替换成自己的集合名和重复字段名即可。 var removeInstanceIdArr = []; var data = db.getCollection("table_test").aggregate( [ { "$group" : { "key": {"Id"…

「全域BI-运营」——助力双11店铺数据可视化

大部分商家主要靠销售商品赚取利润&#xff0c;因此要及时掌握&#xff1a;店铺流量是否异常波动&#xff1f;商品/新品是否有良好竞争力&#xff1f;如何更好营销吸引用户提高客单和回购&#xff1f;掌握这些情况以后&#xff0c;才能进一步决策。 特别是双11期间&#xff0c…

基于51单片机交通灯仿真_紧急开关+黄灯倒计时+可调时间(proteus+代码+报告+讲解视频)

基于51单片机交通灯_紧急开关黄灯倒计时可调时间 ☑️开题报告☑️仿真图&#xff08;提供源文件&#xff09;&#xff1a;☑️系统硬件设计☑️主控制器选择☑️系统硬件结构图☑️时钟及复位电路☑️指示灯及倒计时模块 ☑️倒计时模块&#xff1a;☑️程序☑️软件主流程框架…

Python实现自动登录+获取数据

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 Dy这个东西想必大家都用过&#xff0c;而且还经常刷&#xff0c;今天就来用代码&#xff0c;获取它的视频数据 如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码 环境使用 Python 3.8 Pycharm 模块使用 request…

c++ 获取时间 微秒

参考:https://juejin.cn/s/c%2B%2B%20%E8%8E%B7%E5%8F%96%E6%97%B6%E9%97%B4%20%E5%BE%AE%E7%A7%92 在 C 中获取当前时间的微秒数可以使用 头文件中的 std::chrono::high_resolution_clock 类。该类提供了高精度的计时功能&#xff0c;可以精确到纳秒级别。 以下是一个示例代…

js进阶笔记之构造函数

目录 一、构造函数 1、 创建对象 2、new执行过程 3、带参数构造函数 4、实例成员与静态成员 二、内置构造函数 1、Object静态方法 2、包装类型 3、Array 1、map方法 2、find方法 3、findIndex( ) 4、some与every 5、reverse() 6、reduce方法 7、forEach() …

wget 对整站内容进行爬取

如果你想对站点内容进行爬虫&#xff0c;还有一条最简洁的系统原生命令可以搞定&#xff1a; wget --random-wait -r -p -e robotsoff -U mozilla https://example.com/ 加上 -nv 或 --no-verbose 参数后&#xff0c;输出的内容会变得更加简洁&#xff1b; 加上 --accept-re…

DrugMAP: molecular atlas and pharma-information of all drugs学习

DrugMAP&#xff1a;所有药物的分子图谱和制药信息 - PMC (nih.gov) DrugMAP: the molecular atlas and pharma-information of drugs (idrblab.net) 构建了一个描述药物分子图谱和药物信息的新数据库&#xff08;DrugMAP&#xff09;。它提供了>30 000种药物/候选药物的相…

bash: ./configure: /bin/sh^M: bad interpreter: No such file or directory

问题背景&#xff1a; 在linux上编译Qt时&#xff0c;遇到这个问题 “bash: ./configure: /bin/sh^M: bad interpreter: No such file or directory” 问题原因&#xff1a; Qt的configure文件是在windows上写的&#xff0c;现在是在ubuntu上进行编译。而linux和windows在换…

数字化转型导师坚鹏:数字化时代银行网点厅堂营销5大难点分析

数字化时代银行网点厅堂营销存在以下5大难点&#xff1a; 1、识别难。识别有效的客户比较难&#xff0c;传统的厅堂识别主要依据客户的衣着气质等主管感受&#xff0c;判断客户是否为潜在中高端客户&#xff0c;提供相关服务。大堂经理主管识别与智能化系统识别相结合&#xf…

C++单调向量算法:132 模式解法三枚举1

本题不同解法 包括题目及代码C二分查找算法&#xff1a;132 模式解法一枚举3C二分查找算法&#xff1a;132 模式解法二枚举2代码最简洁C二分查找算法&#xff1a;132 模式解法三枚举1性能最佳C单调向量算法&#xff1a;132 模式解法三枚举1 分析 时间复杂度 2轮循环时间复杂…

如何选择适合的开源框架来构建微服务架构?

随着科技的飞速发展&#xff0c;云计算和大规模应用的需求日益显著&#xff0c;这促使微服务架构在软件开发领域中占据了主流地位。微服务架构的广泛应用为开发人员提供了灵活性、可伸缩性和高可用性&#xff0c;从而推动了快速的应用程序开发。然而&#xff0c;在构建微服务架…

NextJS开发:nextjs中使用CkEditor5

NextJS项目中需要使用CkEditor5作为富文本编辑器&#xff0c;按照官网React CkEditor5手册使用出现如下错误&#xff1a; node_modules/ckeditor/ckeditor5-react/dist/index.js (5:242) eval⨯ ReferenceError: self is not defined还是因为nextjs的服务器端渲染造成的错误&…

快速幂(c++,超级详细)

快速幂 如果我们打算求a^b, 我们可能会写一个for循环&#xff0c;乘以b次a&#xff0c;时间复杂度为O(b) 当b比较小的时候还可以运用&#xff0c;但是当b很大&#xff0c;比如b1000000,此时时间复杂度就显然很高了&#xff0c;我们需要对其进行优化 ———快速幂 开始之前&a…

JDBC快速入门

JDBC快速入门 PS&#xff1a;上传图片有点问题&#xff0c;我整理成了PDF格式&#xff0c;方便看图文。 今日目标 掌握JDBC的的CRUD理解JDBC中各个对象的作用掌握Druid的使用 1&#xff0c;JDBC概述 在开发中我们使用的是java语言&#xff0c;那么势必要通过java语言操作数据库…