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


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

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

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

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

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

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

      // 用于配置的 DSL
      config {
          server {
              host = 'localhost'
              port = 8080
          }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
    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}"
      
      • 1
      • 2
      • 3
    7. 并发编程: Groovy 支持并发编程,可以方便地进行多线程和异步编程。

      def result = []
      def threads = 5
      
      (1..threads).each { id ->
          Thread.start {
              result << "Thread $id"
          }
      }
      
      Thread.sleep(1000)
      println result.join(', ')
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11

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

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

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

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

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

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

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

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

      class MyNumber {
          def value
      
          MyNumber(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
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
    7. 元编程: Groovy 支持元编程,允许在运行时修改类和对象的结构,添加方法等。

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

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

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

    1. print 和 println 函数:

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

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

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

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

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

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

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

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

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

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

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

    举例子使用

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

    1. 导入库和插件:

    2. 类定义:

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

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

      @Override
      void afterInitParams(Params params) {
          // ...
      }
      
      • 1
      • 2
      • 3
      • 4
    5. execute 方法:

      @Override
      def execute() {
          jenkins.stage('Run cases') { firstRunCase() }
          if (jenkins.stepUtil.checkIfExistsRerun()) {
              context.setBuildResult(ResultEnum.FAILURE)
          }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
    6. finished 方法:

      @Override
      def finished() {
          super.finished()
          sendNotification()
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
    7. sendNotification 方法:

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

      String getFailedMessage() {
          // ...
      }
      
      • 1
      • 2
      • 3
    9. CMPDailyParams 类:

      class CMPDailyParams extends RoomsDailyParams {
          // ...
      }
      
      • 1
      • 2
      • 3
    10. Pipeline 节点:

      node(buildNode) {
          new CMPDailyRunExecutor(jenkins: this).run()
      }
      
      • 1
      • 2
      • 3

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

  • 相关阅读:
    redisinsight--基础--2.2--安装--docker安装
    Kettle需求场景复现
    C# Onnx 轻量实时的M-LSD直线检测
    SpotBugs检查java代码:不应该依赖平台默认编码(DM_DEFAULT_ENCODING)
    前端js调用后端API获取数据的三种方法(2022.7.25)
    SpringBoot项目实现发布订阅模式,真的很简单
    新增功能 编辑功能 数据回填 显示详情不准确的三种修复方式 控制统一弹窗 删除功能 表单校验
    【C语言 数据结构】队列 - 链式、顺序
    设计模式-day01
    常用的Git和Linux命令
  • 原文地址:https://blog.csdn.net/darlingmz/article/details/134537498