Groovy配置环境和编译运行的几种方式

前言

由于Groovy也是基于JVM的语言,以下几种方式都需要先安装和配置JDK;有关JDK安装和配置和GroovySDK环境变量类似,所以可以参考第一种方式的GroovySDK环境变量的配置;

第一种方式

通过Groovy SDK配置环境变量,编译运行代码;通过Groovy同时基于JVM的语言,所有需要先安装和配置JDK;有关JDK安装和配置和GroovySDK环境变量类似,所以可以参考如下配置;

1.1,下载Groovy SDK并解压到自己的存放路径;

官方地址:http : //www.groovy-lang.org/download.html

1.2,配置GroovySDK的环境变量

右键“此电脑” —>“属性” —>“系统高级设置” —>“环境变量” —>“系统变量”

点击“系统变量”下的新建变量名输入:GROOVY_HOME变量值:D:\ groovy-2.5.8 SDK(自己解压路径存放跟路径)

再“系统变量”中找到路径变量,双击双击或单击编辑;新建%GROOVY_HOME%\ bin;最后依次单击确定关闭窗口

1.3,验证环境变量是否正确,命令行中输入groovy -v运行出现如下:说明配置成功

C:\Users\Ang>groovy -v
Groovy Version: 2.5.8 JVM: 1.8.0_121 Vendor: Oracle Corporation OS: Windows 10

C:\Users\Ang>

如果出现“错误:找不到或无法加载主类org.codehaus.groovy.tools.GroovyStarter”说明环境变量配置的有问题;需要根据以上步骤排查问题;

1.4,启动GroovySDK自带的编辑器,命令中输入groovyconsole运行,注意中间没有空间;或者在SDK下bin目录中找到groovy console.bat双击运行也可以;

1.5,编写Groovy代码,编译运行看看效果;

 

1.6,可以CTRL + S保存为.groovy格式的文件,例如:Test.groovy;然后在命令行中cd切换到Test.groovy文件的所在目录运行groovy Test.groovy

C:\Users\Ang>cd Desktop

C:\Users\Ang\Desktop>groovy Test.groovy
HelloWorld!!

C:\Users\Ang\Desktop>

第二种方式

通过AndroidStudio创建的项目,build.gradle新建任务通过gradle编译运行Groovy代码;

2.1,首先要有AndroidStudio运行环境,这里不是此处的重点,所以就不具体说了;

2.2,有了Android开发环境,就可以新建项目或者打开一个Androidstudio创建的Android项目;

2.3,在Project的build.gradle新建任务并编写Groovy代码,例如:

task(helloTask).doLast{
    println("hello world")
    add(2,8)
}

def add(a,b){
    println("a+b="+(a+b));
}

2.4,由于需要gradle命令编译运行Groovy代码,所以也配置gradle的环境变量,gradle环境变量的配置和GroovySDK类似,就不做重复介绍了;下载路径:https ://gradle.org/install/#manually

2.5,在AndroidStudio的终端终端中输入命令gradle helloTask运行:

在Android项目的Project的build.gradle文件中新建


第三种方式

也是通过AndroidStudio提供的功能编译运行;可以运行Java类型也可以是脚本类型的代码

3.1,单击androidStudio菜单控件的工具拖动单击Groovy Consoles选项

3.2,进入Groovy Consoles立即编写Groovy代码例如:

class DemoGroovy{
    static void main(String [] args){
        println("Hello World")
        haveFun();
    }
    
    def static haveFun() {
        def x = 1.23
        def result = ""
        switch (x) {
            case "foo":
                result = "found foo"
                System.out.println("result= " + result);
            case "bar":
                result += "bar"
                System.out.println("result= " + result);
            case [4, 5, 6, 'inList']:
                result = "list"
                System.out.println("result= " + result);
                break
            case 12..30:
                result = "range"
                System.out.println("result= " + result);
                break
            case Integer:
                result = "integer"
                System.out.println("result= " + result);
                break
            case Number:
                result = "number"
                System.out.println("result= " + result);
                break
            case { it < 3 }:
                result = "number < 3"
                System.out.println("result=" + result);
                break
            default:
                result = "default"
                System.out.println("result=" + result);
        }
    }
}

3.3,如下图编译运行;

 运行结果:


第四种方式

Eclipse中安装Groovy插件,通过Eclipse编写Groovy代码并编译运行;

4.1,根据Eclipse找到对应的Groovy插件版本;版本要一致哦,例如我的Eclipse是4.9那对应的Groovy插件就是https://dist.springsource.org/release/GRECLIPSE/e4.9

各个版本Groovy插件:https : //github.com/groovy/groovy-eclipse/wiki

4.2,Eclipse中单击帮助->安装新软件...->添加名称自定义就好,位置填入对应版本号的Groovy插件

4.3,点击添加开始加载插件,然后全选就好,点击下一步开始下载插件,最后根据提示重启Eclipse就OK了;

4.4,新建GroovyProject,自定义项目名称,然后新建包名,包名自定义就好了;

4.5,快捷项目—新增—>其他。.--> Groovy —>新建Groovy类型(里面可以选Java类型的或者脚本类型的或者其他)替代是Java类型的;

4.6,编写Groovy代码,编译运行

Java类型的

package com.ang

class Demo1 {
	static void main(String [] args) {
		println("Hello World")
	}
}

编译运行Eclipse —>运行

打印输出:Hello World

脚本类型的

package com.ang

def s = "你好"
println s

 编译运行Eclipse-> run选择Groovy脚本

打印输出:你好


第五种方式

通过Intellij Idea创建Groovy项目,由于AndroidStudio是在IDEA的基础上开发的,所以第三种方式也可以在IDEA中实现;我的IDEA版本是2018.2.6;

5.1,需要有GroovySDK,第一种方式已经提供了下载安装流程;

5.2,IDEA中文件->新建->项目->选择Groovy项目,配置JDK(通过新找到的本机JDK安装路径)和GroovySDK(创建..配置本机的GroovySDK路径);然后关闭Kotlin / JVM具体如下图;点击下一步(下一步)输入项目名称和项目存放路径

5.3,创建包名,然后就可以编写Groovy项目代码了,可以创建Java类型的代码,也可以创建脚本脚本类型;

Java类型代码:快捷项目—>新建—>选择Groovy类填充文件名

代码如下 

package com.ang

class Hello {
    static void main(String[] args) {
        println "HelloWorld"
    }
}

编译运行:右键运行Hello.main()或者Ctrl + Shift + 10再或者工具栏运行拖放选择

你好,世界

脚本类型

创建方式和java类型代码相似,唯一不同就是新建选择Groovy Script;脚本代码如下:

package com.ang

def s = "Groovy Study"
println(s)

编译运行(和Java类型一样):

 

最后,IDEA中新建一个Gradle项目,在build.gradle编写第二种方式的任务,再以同样的方式编译运行Groovy代码也是可以的; 

第六种方式

通过创建Gradle插件(分为脚本插件和对象插件,这里使用的是对象插件)编译运行Groovy代码或者脚本;

1,AndroidStudio 新建或者打开一个Android项目

2,新建一个Java Libray module,module名字随意,例如:lib;

3,将src\main\java 改为src\main\groovy;

4,修改lib\build.gradle中的内容,修改后为:

apply plugin: 'groovy'

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation localGroovy()
}

sourceCompatibility = "1.7"
targetCompatibility = "1.7"

注释:

apply plugin: 'groovy'   引入 groovy 插件,groovy 插件继承了 java 插件。

implementation localGroovy()  引入 Gradle 所带的 Groovy 库。

5,修改新建lib默认的Java文件名和后缀,名字自定义后缀为.groovy 这样就可以编写groovy语法的代码了;

例如:MyGroovy.groovy

package com.ang.lib;

class MyGroovy {
    static void main(String[] args) {
        println "this is MyGroovy"
    }
}

6,再lib\build.gradle中增加如下代码,点击同步;

task renameGroovyToJava {
    doLast {
        delete "$buildDir/classes/java"
        File file = new File("$buildDir/classes/groovy")
        // file.name = "java" 不行,会报错
        println file.renameTo("$buildDir/classes/java")
    }
}
compileJava.finalizedBy compileGroovy
compileGroovy.finalizedBy renameGroovyToJava

7,回到MyGroovy.groovy文件中,左边有可点击绿色三角按钮,点击选择Run 'MyGroovy.main()'编译运行GroovyJava类型的代码;

原理:当compileJava Task执行之后,开始执行附着在 compileJava 后面的 compileGroovy Task,compileGroovy Task执行后,再将 build\classes\groovy文件路径修改为build\classes\java。从而使 androidstudio 可以执行groovy编译后的class文件。如果没有修改会出现:

脚本类

脚本类型和Java类型类似只是写法不同而已;例如修改MyGroovy.groovy 文件内容

 

写好了groovy脚本没有左边的可点击按钮怎么运行呢;其实也简单,使用快捷键Alt+Shift+F10选择MyGroovy运行;

或者点击AndroidStudio工具栏编译旁的下拉选择MyGroovy,点击三角按钮编译运行;

 

总结:其实还有很多方式运行Groovy代码;


Groovy实现相关原理

groovy负责词法,语法解析groovy文件,然后用ASM生成普通的java字节码文件,供jvm使用。

Groovy代码文件与class文件的对应关系

作为基于JVM的语言,Groovy可以非常容易的和Java进行互操作,但也需要编译成classfile后才能运行,所以了解Groovy代码文件和class文件的对应关系,可以更好地理解Groovy的运行方式和结构。

对于没有任何类定义

如果Groovy脚本文件里只有执行代码,没有定义任何类(class),则编译器会生成一个脚本的子类,类名和脚本文件的文件名一样,而脚本的代码会被包含在一个称为run的方法中,同时将会生成一个main方法,作为整个脚本的入口。

对于仅有一个类

如果Groovy脚本文件里仅包含一个类,而这个类的名字又和脚本文件的名字一致,这种情况下就和Java是一样的,即生成与所定义的类一致的class文件,Groovy类都会实现groovy.lang.GroovyObject接口。

对于多个类

如果Groovy脚本文件包含一个或多个类,groovy编译器会很乐意地为每个类生成一个对应的类文件。如果想直接执行这个脚本,则脚本里的第一个类必须有一个静态的main方法。

对于有定义类的脚本

如果Groovy脚本文件有执行代码,并且有定义类,那么所定义的类会生成对应的类文件,同时,脚本本身也会被编译成一个脚本的子类,类名和脚本文件的文件名相同
 

groovy文件代码主要分为两类:

第一类:java式以类形式编写代码第二类:脚本式

第一类典型代码

class DemoGroovy{
    //main方法程序入口
    static void main(String [] args){
        println("Hello World")
        haveFun();
    }


    def static haveFun() {
        def x = 1.23
        def result = ""
        switch (x) {
            case "foo":
                result = "found foo"
                System.out.println("result= " + result);
            case "bar":
                result += "bar"
                System.out.println("result= " + result);
            case [4, 5, 6, 'inList']:
                result = "list"
                System.out.println("result= " + result);
                break
            case 12..30:
                result = "range"
                System.out.println("result= " + result);
                break
            case Integer:
                result = "integer"
                System.out.println("result= " + result);
                break
            case Number:
                result = "number"
                System.out.println("result= " + result);
                break
            case { it < 3 }:
                result = "number < 3"
                System.out.println("result=" + result);
                break
            default:
                result = "default"
                System.out.println("result=" + result);
        }
    }
}

第二类脚本的形式:

def word = "你好吗?"
println word

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章