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

 

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