私は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: No signature of method: groovy.util.ConfigSlurper.parse() is applied for argument types: (CharacterMap, java.net.URL ) ご覧のとおり、URL として宣言された引数を 1 つだけ渡しています。クラスのすべてのメソッドは静的であり、コンストラクターはどこにも参照されていないため、インスタンスがまったく作成されていないのは一種の奇妙であり、それが parse メソッドに渡されているのはさらに奇妙です。Stack Overflow で MissingMethodException を取得している他の人を読んだことがありますが (ただし、通常は余分な引数ではなくクロージャーに関連しています)、それは Eclipse のせいです。これをEclipseではなくIntelliJで実行しています。
編集:以下のコメントに応じて、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)、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) で groovy.util.ConfigSlurper$parse.call(不明なソース) で 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) で ucp.cms.search.CharacterMap.main(CharacterMap.groovy:51) で sun.reflect .NativeMethodAccessorImpl.invoke0(ネイティブ メソッド)、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 で終了しました