Groovy使用系列-安装配置
The Apache Groovy programming language (groovy-lang.org)
Groovy 是什么?
Apache Groovy 是一种功能强大、可选类型化和动态的语言,具有静态类型化和静态编译功能,Java 平台旨在通过简洁、熟悉和易于学习的语法提高开发人员的生产力。它与任何 Java 程序顺利集成,并立即向应用程序提供强大的功能,包括脚本功能、领域特定语言编写、运行时和编译时元编程和函数式编程。
- 简单易学
简洁、易读、易表达的语法,易于 Java 开发人员学习
- 与java集成方便
与 Java 和任何第三方库无缝、透明地集成和互操作
- 丰富的生态圈
Web 开发、反应式应用程序、并发/异步/并行库、测试框架、构建工具、代码分析、 GUI 构建
- 脚本化及测试便捷
非常适合编写简洁和可维护的测试,以及所有的构建和自动化任务
- DSL(领域模型语言)
灵活和可延展的语法,先进的集成和定制机制,以集成可读的业务规则在您的应用程序
- 强大的功能特性
闭包、构建器、运行时和编译时元编程、函数式编程、类型推断和静态编译
为什么用Groovy?
- 对于java开发者,可以非常方便的上手
- Groovy 是一种敏捷和动态的语言、脚本化(类似Python,ruby等),简化及方便开发
groovy 安装
- 1 下载groovy
The Apache Groovy programming language - Download
groovy与JVM的版本对应关系
-
- 安装
groovy环境变量配置
环境变量配置:
GROOVY_HOME: groovy软件解压目录
path环境变量追加
GROOVY_HOME/bin: path上配置可执行目录
groovy安装校验
groovy --version
#表示已经安装配置成功
#Groovy Version: 4.0.8 JVM: 1.8.0_201 Vendor: Oracle Corporation OS: Windows 10
#进入groovy提供的命令行进行操作
groovysh
#groovy提供的简单的ide工具
groovyConsole
#groovy 命令执行脚本文件
groovy 入门
- 默认包import引入
java.io.*
java.lang.*
java.math.BigDecimal
java.math.BigInteger
java.net.*
java.util.*
groovy.lang.*
groovy.util.*
- 多方法重载
- 数组初始化
# groovy 数组申明
int[] array = [1, 2, 3]
# groovy3+
def array2 = new int[] {1, 2, 3}
- String
# Gtring : "" 支持${xxx}读取变量,如果变量不存在报错
# String '' 不支持变量${xxx},将字符串原样输出
# String ''' 多行字符串 ''' 不支持变量的解析
- 额外关键字
`as`
`def`
`in`
`trait`
`it` // within closures(闭包中使用)
groovy 开发包(GDK)基本使用
package com.groovy.demo
import java.time.LocalDate
import java.time.OffsetTime
// Groovy Development Kit 工具包相关API使用
文件操作
def basepath='xxxx'
new File(basepath, 'test.groovy').eachLine { line ->
println line
}
//集合操作
def list1 = [1, 2, 3, 4];
printf(list1.get(2) as String)
assert list1 instanceof List
list1.each {
//it:闭包的变量
printf("$it")
}
printf("\n-------------\n")
//map 使用
def key = 'test'
//在map中使用变量为空key 使用时, (key):表示使用变量
def usermap = [id: 1001, name: 'mj', key: 'test', (key): 'test']
println(usermap.get("name"))
println(usermap.get("key"))
println(usermap.get("test"))
//数据操作
usermap.put('sex', "man")
usermap.remove("id")
//循环遍历数据
usermap.each { entry ->
println("key:$entry.key=$entry.value")
}
//range,连续的序列生成
/**
* ..
* <..:不包含左
* ..<:不包含右
* <..<:左、右不包含
*/
def rang = 1..10
def rg = 'A'..'Z'
rang.each { it ->
println("data:${it}")
}
rg.each { it ->
println("字符:${it}")
}
//时间操作
def date = LocalDate.now()
println("$date")
//format,parse
def offsetTime = OffsetTime.parse('09:47:51-1234', 'HH:mm:ssZ')
println("$offsetTime")