Groovy开发环境搭建

Groovy开发环境搭建

 

Groovy是一种基于JVM(Java虚拟机)的敏捷动态开发语言。它是一种成熟的面向对象编程语言,既可以用于面向对象编程,又可以用作纯粹的脚本语言。

Groovy是一种动态语言,它和Java类似,都在Java虚拟机中运行。当运行Groovy脚本时它会先被编译成Java类字节码,然后通过JVM虚拟机执行这个Java字节码类。

Groovy与 Java可以很好的互相调用并结合编程 ,比如在写 Groovy 的时候忘记了语法可以直接按Java的语法继续写,也可以在 Java 中调用 Groovy 脚本。比起Java,Groovy语法更加的灵活和简洁,可以用更少的代码来实现Java实现的同样功能。要想学好Gradle,Groovy是必须要掌握的。

 

 

Groovy 和 Java 语言对比

用 Java 编写的典型的 Hello World 示例如下所示:

public class HelloWorld {

public static void main(String[] args) {

System.out.println("java:Hello World");

   }

}

 

用 Groovy 编写 Hello World 程序就如下面这样简单:

println "Hello World!"

 

Groovy 支持松散的 Java 语法,例如,不需要为打印 “Hello World!” 这样的简单操作定义类。Groovy 允许输入println,而无需输入System.out.println。

 

 

Groovy是依赖于Java的,所以首先要配置好JDK。

接着,下载Groovy,其网址:

http://groovy-lang.org/download.html

有两种格式:.exe是安装版,.zip是压缩文件版,

我下载的是apache-groovy-sdk-3.0.0-rc-1.zip,是压缩文件版,将其压缩文件解压到任意目录下,即可看到如下文件路径。

bin:该路径下存放了各种工具命令,常用命令groovy就放在该路径下。

lib:该目录下包含了groovy的各种工具JAR包。

licenses:groovy项目相关的各种授权文档。

 

下载完成后,解压到指定目录,

配置Groovy环境变量:将 bin 目录添加到系统环境变量(配置Groovy环境变量)。

将(跟据你的实际情况)D:\groovy-3.0.0-rc-1\bin

放入系统环境变量path

在win10配置系统环境变量

右键此电脑,属性,高级系统设置,系统属性,在“系统变量”中,找到PATH,添加,参见下图:

 

测试

在cmd命令行使用groovy -v,如果出现Groovy版本号说明配置成功。参见下图:

 

【注,若提示

WARNING: An illegal reflective access operation has occurred

WARNING: Illegal reflective access by org.codehaus.groovy.vmplugin.v7.Java7$1 (file:/D:/groovy-2.5.8/bin/../lib/groovy-2.5.8.jar) to constructor java.lang.invoke.MethodHandles$Lookup(java.lang.Class,int)

WARNING: Please consider reporting this to the maintainers of org.codehaus.groovy.vmplugin.v7.Java7$1

WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations

WARNING: All illegal access operations will be denied in a future release

说明groovy版本和jdk的版本不匹配,但影响不大。groovy-2.5.8和jdk11有此问题groovy-3.0和jdk11就没有此问题。】

 

我用的是jdk11,groovy-3.0.0-rc-1

一旦上述步骤之后,你就可以开始使用Groovy shell,有助于测试我们的Groovy,而不需要为Groovy提供一个完整的集成开发环境。可以通过在命令提示符下命令groovysh来完成,参见下图

输入groovysh 回车

输入println "Hello World!" 回车

 

在cmd中使用groovyconsole命令会启动自带的编辑器

输入println "Hello World!",用script ->Run 或 按下快捷键Ctrl +R运行

另外如果选择File - Save As...可以将Groovy保存为groovy文件。所以Groovy的文件后缀就是groovy。当然你也可以在命令行用groovy xxx.groovy来运行Groovy程序。

 

 

Groovy语言基础

Groovy注释标记和Java一样,使用//

Groovy语句可以不用分号结尾。

 

Groovy中的变量

基本类型(java中的int,float,double,byte,char,long,short)和对象类型(String等) ,最终都是对象类型。

int x = 10

println x.class //结果为:class java.lang.Integer

 

Groovy运算符

Groovy的运算符与Java大多相同,也有些与Java的不同点,如:

幂运算符**

assert  2 ** 3   //显示8

 

非运算符!

assert (!true)    //显示false

 

Groovy支持将?:三目运算符简化为二目,如:

displayName = user.name ? user.name : 'Anonymous'  

displayName = user.name ?: 'Anonymous'

 

Groovy定义变量

Groovy中支持动态类型,即定义变量的时候可以不指定其类型。Groovy中,变量定义可以使用关键字def。

def var=1

def str="iamaperson"

def intx=1  //也可以指定类型

Groovy变量定义有强类型定义和弱类型定义2种方式。

强类型定义是在声明一个变量的时候,同时指定变量的类型。如:

int x = 10

double y = 2.0

这种的声明后期不能更改成其他类型。这种类型是强类型。

x="good" //抛出异常(Exception thrown)

 

弱类型定义不需要提前指定变量的类型,可以通过def关键字告诉编译器声明变量。

def z=5

z="Hi"

使用def定义的变量能够随时改变它的类型。

对于弱类型后期可以更改成其他类型 ,开始z 是一个int 类型 后期改成了字符串类型

一般而言,如果变量只有在本模块内部使用,推荐使用弱类型定义方式,可以方便转换成其他需要的类型。如果变量用于其他模块或者其他类,推荐使用强类型定义方式,这种方式定义的变量不能动态转换为其他类型,保证了外界传入的值是正确的。

使用弱类型定义的类型是Object类型,使用强类型定义的类型是具体的某一种类型。

 

Groovy的字符串

Groovy中字符串分为三种,我们一个个来看。

单引号字符串,单引号字符串不会对$号进行转义,原样输出,如下:

def str1 = 'i am $i yuan'//单引号不会转义

println str1 //输出  i am $i yuan

双引号字符串,双引号字符串会对$号进行转义,如下:

def str2 = "i am $i yuan"//双引号会转义

println str2 //输出  i am 10 yuan

 

三引号字符串,三引号字符串支持换行,原样输出,如下:

//三个引号原样输出

def str3 = '''

    public static void main(){

        println "miss you"

    }

'''

println str3

输出:

    public static void main(){

        println "miss you"

    }

 

 

Groovy数据结构(容器类形)

列表

def listA=[1,2,3,4] //定义列表

println listA.min() //输出1

 

列表转数组

def listB = [1,2,3,4,5] as int[] //列表转数组

listB[2]  //输出3

 

数组

int[] array = [1,2,3]

 

映射(map

Groovy 定义 Map 的方式非常简洁,通过中括号包含key、val的形式,key和value以冒号分隔([key:value])。Groovy中的Map其实就是java.util.Map,实现类默认使用的是java.util.LinkedHashMap。

//定义映射(map)

def students = [

                1 : "张三",

                2 : "李四",

                3 : "Jhon"

                ]

//索引

students[1]   //此句也可替换为students.get(1),显示 张三

 

Ranges

简单来说Ranges就是对List的扩展,用…或者…<来定义,具体使用如下:

def Range1 = 1..10//包括10

println Range1.contains(10) //true

 

def Range2 = 1..<10//不包括10

println Range2.contains(10) //false

 

函数

函数定义时,参数的类型也可以不指定。比如

Stringfunction(arg1,args2){//无需指定参数类型}

除了变量定义可以不指定类型外,Groovy中函数的返回值也可以是无类型的。比如:

//无类型的函数定义,必须使用def关键字

def nonReturnTypeFunc(){

   last_line//最后一行代码的执行结果就是本函数的返回值

}

//如果指定了函数返回类型,则可不必加def关键字来定义函数

String getString(){

return "I am a string"

}

 

def  repeat(val){

for(i = 0; i < 5; i++){

println val

}

}

调用这个函数。

repeat("hello world")

会输出 “hello world” 五次。

 

groovy程序结构

包名的定义和作用及含义完全和Java一样,如:

// defining a package named com.yoursite

package com.yoursite

 

Imports引入

常规的imports导包操作和Java一样,如:

import groovy.xml.*

提示:Groovy与Java类似,已经帮我们默认导入了一些常用的包,所以在我们使用这些包的类时就不用再像上面那样导入了,如下是自动导入的包列表:

import java.lang.*

import java.util.*

import java.io.*

import java.net.*

import groovy.lang.*                                  

import groovy.util.*

import java.math.BigInteger

import java.math.BigDecimal

 

 

延展阅读

groovy常用语法及实战

https://www.cnblogs.com/yufecheng/p/11302777.html

Groovy脚本基础全攻略

https://www.jianshu.com/p/fbfaaecc19ee

精通 Groovy

https://www.ibm.com/developerworks/cn/education/java/j-groovy/j-groovy.html