我是Groovy的新手,所以我可能做错了什么。我编写了一个配置,由ConfigSlurper采用。但是当我真正尝试解析它时会出现问题。我的代码如下:
class CharacterMap {
public static final String CHARACTER_CONFIGURATION = 'location'
static Map<String,String> characterMap = null
public static String ASCIIize(String input)
{
if (!characterMap)
{
def property = System.getProperty( CHARACTER_CONFIGURATION )
ConfigObject config = null
if( property ) {
ConfigSlurper cs = new ConfigSlurper()
File file = new File( property )
URL location = file.toURL()
config = cs.parse(location)
}
if (config)
{
characterMap = config.characters
}
else
{
getAnonymousLogger().logp WARNING, getClass().name, 'constructor',
"Server configuration groovy file not configured with system property ${CHARACTER_CONFIGURATION}"
return input
}
}
for (String key: characterMap.keySet())
{
if (input.contains(key))
{
input = input.replace(key, characterMap.get(key))
}
}
return input
}
public static void main(String[] args)
{
print ASCIIize(args[0])
}
}
当它调用parse方法时,它会在线程&#34; main&#34;中抱怨Exception。 groovy.lang.MissingMethodException:没有方法签名:groovy.util.ConfigSlurper.parse()适用于参数类型:(CharacterMap,java.net.URL) 如您所见,我只传递一个参数,该参数被声明为URL。由于类的所有方法都是静态的,并且在任何地方都没有引用任何构造函数,因此根本不会创建实例,更奇怪的是它被传递到解析方法中。我已经读过Stack Overflow上的其他人获得MissingMethodException(虽然通常与闭包相关而不是多余的参数),并且它被归咎于Eclipse。我在IntelliJ而不是Eclipse中运行它。
编辑:在回复下面的评论时,groovy版本是1.8.6。这是堆栈跟踪:
线程中的异常&#34; main&#34; groovy.lang.MissingMethodException:没有 方法签名:groovy.util.ConfigSlurper.parse()适用 对于参数类型:(CharacterMap,java.net.URL)值: [CharacterMap @ 34374a16,文件:/ C:/ Program Files (x86)/ JetBrains / IntelliJ IDEA社区版 11.1.2 / UCP /配置/ CharacterMap.groovy]
可能的解决方案:解析(java.net.URL),解析(groovy.lang.Script, java.net.URL),解析(groovy.lang.Script),解析(java.lang.Class), parse(java.lang.String),parse(java.util.Properties)
在 org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:55) 在 org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:78) 在 org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:46) 在 org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:133) 在 org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:145) 在groovy.util.ConfigSlurper.parse(ConfigSlurper.groovy:148)at at groovy.util.ConfigSlurper $ parse.call(未知来源)at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:42) 在 org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108) 在 org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116) 在ucp.cms.search.CharacterMap.ASCIIize(CharacterMap.groovy:26)at ucp.cms.search.CharacterMap.main(CharacterMap.groovy:51)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.lang.reflect.Method.invoke(Method.java:601)at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
使用退出代码1完成处理