我是 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])
}
}
当它调用解析方法时,它会在线程“主”groovy.lang.MissingMethodException 中抱怨异常:没有方法签名:groovy.util.ConfigSlurper.parse() 适用于参数类型:(CharacterMap, java.net.URL ) 如您所见,我只传递了一个参数,它被声明为一个 URL。由于类的所有方法都是静态的,并且在任何地方都没有引用构造函数,所以创建一个实例有点奇怪,更奇怪的是它被传递到 parse 方法中。我读过 Stack Overflow 上的其他人得到 MissingMethodException (尽管通常与闭包而不是多余的参数有关),并将其归咎于 Eclipse。我在 IntelliJ 而不是 Eclipse 中运行它。
编辑:针对下面的评论,groovy 版本是 1.8.6。这是堆栈跟踪:
线程“主”groovy.lang.MissingMethodException 中的异常:没有方法签名:groovy.util.ConfigSlurper.parse() 适用于参数类型:(CharacterMap, java.net.URL) 值:[CharacterMap@34374a16,文件: /C:/Program Files (x86)/JetBrains/IntelliJ IDEA Community Edition 11.1.2/UCP/config/CharacterMap.groovy]
可能的解决方案:parse(java.net.URL), parse(groovy.lang.Script, java.net.URL), parse(groovy.lang.Script), parse(java.lang.Class), parse(java.lang .String),解析(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) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:133) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java :145) 在 groovy.util.ConfigSlurper.parse(ConfigSlurper.groovy:148) 在 groovy.util.ConfigSlurper$parse.call(Unknown Source) 在 org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java :42) 在 org.codehaus.groovy.runtime 的 org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)。callsite.AbstractCallSite.call(AbstractCallSite.java:116) at ucp.cms.search.CharacterMap.ASCIIize(CharacterMap.groovy:26) at ucp.cms.search.CharacterMap.main(CharacterMap.groovy:51) at sun.reflect .NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method .java:601) 在 com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:601) 在 com.intellij.rt.execution .application.AppMain.main(AppMain.java:120)NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:601) 在 com.intellij.rt.execution .application.AppMain.main(AppMain.java:120)
进程以退出代码 1 结束