2017-02-10 19 views
2

我剛開始學習groovy並嘗試將我的java代碼轉換爲groovy腳本。通常java允許你只有一個類,只有你可以從其他類調用的方法。我想把它翻譯成groovy。我有一個文件 - 讓調用它File1-這樣的方法:使用正確參數的groovy腳本之間的調用方法

def retrieveData(String name){ 
// do something 
} 

,並在第二個文件,文件2,我把文件1這樣的:

def file1Class = this.class.classLoader.parseClass(new File("../File1.groovy")) 

,然後嘗試撥打方法文件1這樣的:

def data = file1Class.retrieveData("String") 

,但它不斷給我這個錯誤 - MissingMethodException:

groovy.lang.MissingMethodException: No signature of method: static File1.retrieveData() is applicable for argument types: (java.lang.String) values: [String] Possible solutions: retrieveData(java.lang.String) 

所以它確實認識到我正在發送正確數量的參數,甚至是正確的對象,但它沒有運行該方法,因爲它應該? 有什麼我失蹤?我試圖從方法中刪除對象定義 - 換句話說 - 像這樣:

def retrieveData(name){ 
// do something 
} 

但是這也沒有效果。我對下一步是什麼感到無能爲力。任何人都可以請幫助推動我在正確的方向嗎?我將不勝感激。

回答

0

查看this StackOverflow reponse提供的答案。使用GroovyScriptEngineclassGroovyScriptEngine做什麼?從文檔:

特定的腳本引擎能夠重新加載修改的腳本以及 正確處理依賴腳本。

請看下面的例子。

def script = new GroovyScriptEngine('.').with { 
    loadScriptByName('..\File1.groovy') 
} 
this.metaClass.mixin script 

retrieveData() 

注意我們如何使用loadScriptByName方法

獲取類的腳本名稱的問題,這樣就可以 實例化高速緩存和重新加載Groovy對象。

這將允許您從文件訪問Groovy對象,無論您滿意。

+0

我試過,但它完全忽略了類路徑。我將必要的jar文件放入ext文件夾中,以便soapUI可以訪問它,並且它使用我在問題中引用的方法,但是當我這樣做時,它會拋出MultipleCompilationErrorsException:無法解析HSSFCell類 – droidnoob

+0

你想要打個電話號碼嗎?如果是這樣,[檢查這個答案](http://stackoverflow.com/questions/15565961/groovyscriptengine-load-groovy-scripts-from-subfolder#15566768),其中描述從子文件夾加載。另外,如果您正在調用由相對路徑定義的資源,則需要在Groovy類之間進行切換時需要格外小心。 – Nathan

+0

File1.groovy和持有File2.groovy的xml都在Documents文件夾中。是的,我必須通過名稱來編輯loadScript腳本:loadScriptByName('../../../../Users/myname/Documents/File1。groovy')'但是jar文件應該到SOAPUI_HOME/bin/ext文件夾。那爲什麼不看它呢?在閱讀File1.groovy? – droidnoob

相關問題