2013-04-16 75 views
1

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

(這個問題有沒有關係休息,但我使用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() 
} 

爲hierarcy超類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建設者,如果我使用-classpath然後我得到的問題,像這樣:java.lang.NoClassDefFoundError: groovyx.net.http.HTTPBuilder

回答

4

您可以在一個groovy腳本中放入多個類(不知道如何/如果軟件包以這種方式工作),或者只是在與主腳本相同的文件夾中創建包結構作爲目錄結構。

在您的例子,可能是這樣的:

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

然後,您可以打電話給你的腳本是這樣的:

> groovy RestCli.groovy B 
+0

謝謝!很簡單的解決方案 – lagurz