2017-02-10 248 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