Java 使用正确参数在groovy脚本之间调用方法

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

我刚刚开始学习groovy,并尝试将java代码转换为groovy脚本。通常,java允许您拥有一个只包含可以从其他类调用的方法的类。我想把它翻译成groovy。我有一个文件-我们称之为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
}
在第二个文件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的文件夹中,但仍然没有