认识
官网:https://groovy-lang.org/index.html
文档:https://groovy-lang.org/single-page-documentation.html
仓库:https://github.com/apache/groovy
Apache Groovy 是一种基于 Java 平台的动态编程语言。简而言之,Apache Groovy 是种脚本语言,运行在 JVM 上。
组成
命令行程序 and 配置文件
groovy | groovy.bat
- Running Groovy from the commandline | https://docs.groovy-lang.org/latest/html/documentation/tools-groovy.html
- groovy -cp ./src/ ./src/path/to/foo.groovy
- groovy -cp ./src/ -e ‘new gbu.wrapper.vcs.GiteaWrapper().cloneUserRepository()’
grape | grape.bat
groovyConsole | groovyConsole.bat
groovyc | groovyc.bat
groovydoc | groovydoc.bat
groovysh | groovysh.bat
java2groovy | java2groovy.bat
startGroovy | startGroovy.bat
性质
它支持面向对象编程、函数式编程、元编程和动态类型语言的特性。
Apache Groovy 可以与 Java 语言无缝集成,可以直接调用 Java 类库,也可以被 Java 代码调用。
Apache Groovy 的语法简洁、易读、易写,它的语法和 Java 语言相似,但却更加灵活,可以更快地开发出高效的应用程序。
Apache Groovy 还支持闭包、类型推断、运行时元编程等高级特性,使得编写代码更加方便快捷。
构建
环境安装
下载地址 | https://groovy.apache.org/download.html
版本选择
Release notes for Groovy | https://groovy-lang.org/releases.html
各版本 Groovy 要求的 JVM 的版本 | System requirements
https://groovy.apache.org/download.html#requirements
Groovy JVM Required (non-indy) JVM Required (indy) * 5.0 (in alpha) N/A 11 4.0 N/A 1.8+ 3.0 1.8+ 1.8+ 2.5 - 2.6 1.7+ 1.7+ 2.3 - 2.4 1.6+ 1.7+ 2.0 - 2.2 1.5+ 1.7+ 1.6 - 1.8 1.5+ N/A 1.5 1.4+ N/A 1.0 1.4-1.7 N/A
with asdf
asdf plugin-list all | grep -i groovy
asdf plugin-add groovy
asdf list all groovy
asdf install groovy 2.4.21
asdf global groovy 2.4.21
groovy –version
for Build Tools
例如,针对 Maven 工具
<groupId>org.codehaus.groovy</groupId> <artifactId>groovy-all</artifactId> <version>x.y.z</version> <type>pom</type> <!-- required JUST since Groovy 2.5.0 -->
应用
由于其良好的兼容性和易用性,Apache Groovy 被广泛应用于 Web 开发、测试自动化、数据分析等领域。
场景 | Jenkins Pipeline
在学些 Jenkins Pipeline 语法时,我们接触到 Groovy 语言。我们决定对 Groovy 进行简单学习,以编写功能强大的 Pipeline Shared Libraries 库。该笔记将记录:我们学习 Apache Groovy 而产生学习笔记,以及常见问题而解决办法(常用的代码段),以解决 Jenkins Pipeline 中相关问题为核心。
场景 | 开发常用实用工具
我们通过 Groovy 来开发常用工具及实用程序,原因在于:
- 早期,开发 Jenkins Pipeline 库时我们编写许多代码,所以,为减少重复工作。
- 另外,当通过 Shell 实现复杂工具时,受其限制,难以开发,而高级语言相对简单。
操作 .ini 文件
def configFile = new File(configFileId)
def properties = new Properties()
configFile.withInputStream { properties.load(it) }
configFileContent = properties as Map