Java 使用正确参数在groovy脚本之间调用方法
我刚刚开始学习groovy,并尝试将java代码转换为groovy脚本。通常,java允许您拥有一个只包含可以从其他类调用的方法的类。我想把它翻译成groovy。我有一个文件-我们称之为File1-一个类似以下的方法:Java 使用正确参数在groovy脚本之间调用方法,java,grails,groovy,soapui,Java,Grails,Groovy,Soapui,我刚刚开始学习groovy,并尝试将java代码转换为groovy脚本。通常,java允许您拥有一个只包含可以从其他类调用的方法的类。我想把它翻译成groovy。我有一个文件-我们称之为File1-一个类似以下的方法: def retrieveData(String name){ // do something } def file1Class = this.class.classLoader.parseClass(new File("../File1.groovy")) def dat
def retrieveData(String name){
// do something
}
def file1Class = this.class.classLoader.parseClass(new File("../File1.groovy"))
def data = file1Class.retrieveData("String")
def retrieveData(name){
// do something
}
在第二个文件File2中,我这样称呼File1:
def retrieveData(String name){
// do something
}
def file1Class = this.class.classLoader.parseClass(new File("../File1.groovy"))
def data = file1Class.retrieveData("String")
def retrieveData(name){
// do something
}
然后尝试调用File1中的方法,如下所示:
def retrieveData(String name){
// do something
}
def file1Class = this.class.classLoader.parseClass(new File("../File1.groovy"))
def data = file1Class.retrieveData("String")
def retrieveData(name){
// do something
}
但它一直给我这个错误-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(String name){
// do something
}
def file1Class = this.class.classLoader.parseClass(new File("../File1.groovy"))
def data = file1Class.retrieveData("String")
def retrieveData(name){
// do something
}
但这也不起作用。我不知道下一步会是什么。谁能帮我把方向推对吗?非常感谢。请参阅中提供的答案 使用
groovyscript引擎
。GroovyScriptEngine
做什么?从文档中:
特定的脚本引擎能够重新加载修改后的脚本以及
正确处理依赖脚本
请参见下面的示例
def script = new GroovyScriptEngine( '.' ).with {
loadScriptByName( '..\File1.groovy' )
}
this.metaClass.mixin script
retrieveData()
注意我们如何使用loadScriptByName
方法
获取有问题的scriptName类,以便
通过缓存和重新加载实例化Groovy对象
这将允许您随意从文件中访问Groovy对象。我尝试过,但它完全忽略了类路径。我将必要的jar文件放入ext文件夹中,以便soapUI可以访问它,它确实使用了我在问题中引用的方法,但当我这样做时,它会引发多重编译错误异常:无法解析类HSSFCella是否尝试调用目录?如果是,则说明从子文件夹加载。另外,如果调用由相对路径定义的资源,则在groovy类之间切换时需要格外小心。是的,我必须按名称将loadScript编辑为:
loadScriptByName('../../../../../Users/myname/Documents/File1.groovy')
,但是jar文件应该转到SOAPUI_HOME/bin/ext文件夹。那为什么它看不见呢?在读取File1.groovy时?您对它做了什么更改?我更改了它指向的目录,因此它指向File1.groovy的正确位置。我甚至尝试将File1.groovy文件移动到包含jar的文件夹中,但仍然没有