簡體   English   中英

在groovy腳本中包含類

[英]Include classes in a groovy script

如何在Groovy腳本中包含幾個類?

(此問題與REST無關,但我使用REST將問題放在正確的上下文中)

背景:我正在用Groovy開發CLI,以從我們正在運行的服務中獲取狀態信息。 狀態信息作為REST接口公開。

根據我在CLI上給出的參數,在REST接口上調用不同的路徑。 我還將實際的REST通信放入了類層次結構中,以便能夠重用代碼,這就是我遇到的問題。 如何以簡單的方式將類層次結構包含在groovy腳本中?

Groovy CLI腳本RestCli.groovy

import restcli.RestA
import restcli.RestB

if(args[0] == "A") {
    new RestA().restCall()
}
else if(args[0] == "B") {
    new RestB().restCall()
}

用於層級restcli/RestSuper.groovy超類

package restcli

abstract class RestSuper {

    protected def restCall(String path) {
        println 'Calling: ' +path
    } 

    abstract def restCall()

}

兩個類實現不同的調用。 restcli/RestA.groovy

package restcli

class RestA extends RestSuper {

    def restCall() {
        restCall("/rest/AA")
    }       

}

restcli/RestB.groovy

package restcli

class RestB extends RestSuper {

    def restCall() {
        restCall("/rest/BB")
    }

}

我想要得到的結果很簡單:

> groovy RestCli.groovy B
Calling: /rest/BB

有關如何執行此操作的任何想法?

我實際上想避免創建一個jar文件,然后使用-classpath選項,因為我也使用@Grab來獲取http-builder,如果我使用-classpath那么我會遇到這樣的問題: java.lang.NoClassDefFoundError: groovyx.net.http.HTTPBuilder

您可以將多個類放在一個常規腳本中(不確定軟件包的工作方式/方式),也可以將軟件包結構作為目錄結構創建在與主腳本相同的文件夾中。

在您的示例中,可能看起來像這樣:

/
+ RestCli.groovy
+ restcli/
+--+ RestSuper.groovy
+--+ RestA.groovy
+--+ RestB.groovy

然后可以這樣調用腳本:

> groovy RestCli.groovy B

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM