2012-02-07 13 views
0

私はばかなことですが、groovyをsrc/groovyに追加して動作させる方法がわかりません。私はブートストラップにいくつかのメタデータを持っていますが、私は単体テストやこの質問に基づいてどこからでも呼び出すことができます。上に)それは動作します。grailsプロジェクトにgroovyを含める方法

ExpandoMetaClass.enableGlobally() 
Integer.metaClass.gimmeAP = {->return 'p'} 
assert 3.gimmeAP() == 'p' 

だから私は、STSを使用していると私はグルーヴィーのsrc /にアクセスし、「新GroovyClassは」MyProjectとをパッケージ化し、ようにして、それを埋めるためにそれを追加言う:

package yakit 

class MetaThangs { 
    def doMetaThangs() { 
    ExpandoMetaClass.enableGlobally() 

    Integer.metaClass.gimmeAP = {->return 'p'} 
    } 
} 

その後、私はこの中を呼び出しますブートストラップ:

MetaThangs.doMetaThangs() 
assert 3.gimmeAP() == 'p' 

私はエラーを取得する:

Running Grails application.. 
2012-02-07 14:12:13,332 [main] ERROR context.GrailsContextLoader - Error executing bootstraps: groovy.lang.MissingMethodException: No signature of method: static lrnmeta.MetaThangs.doMetaThangs() is applicable for argument types:() values: [] 
Possible solutions: doMetaThangs() 
org.codehaus.groovy.runtime.InvokerInvocationException: groovy.lang.MissingMethodException: No signature of method: static lrnmeta.MetaThangs.doMetaThangs() is applicable for argument types:() values: [] 
Possible solutions: doMetaThangs() 
at grails.util.Environment.evaluateEnvironmentSpecificBlock(Environment.java:251) 
at grails.util.Environment.executeForEnvironment(Environment.java:244) 
at grails.util.Environment.executeForCurrentEnvironment(Environment.java:220) 
at org.grails.tomcat.TomcatServer.start(TomcatServer.groovy:212) 
at grails.web.container.EmbeddableServer$start.call(Unknown Source) 
at _GrailsRun_groovy$_run_closure5_closure12.doCall(_GrailsRun_groovy:158) 
at _GrailsRun_groovy$_run_closure5_closure12.doCall(_GrailsRun_groovy) 
at _GrailsSettings_groovy$_run_closure10.doCall(_GrailsSettings_groovy:280) 
at _GrailsSettings_groovy$_run_closure10.call(_GrailsSettings_groovy) 
at _GrailsRun_groovy$_run_closure5.doCall(_GrailsRun_groovy:149) 
at _GrailsRun_groovy$_run_closure5.call(_GrailsRun_groovy) 
at _GrailsRun_groovy.runInline(_GrailsRun_groovy:116) 
at _GrailsRun_groovy.this$4$runInline(_GrailsRun_groovy) 
at _GrailsRun_groovy$_run_closure1.doCall(_GrailsRun_groovy:59) 
at RunApp$_run_closure1.doCall(RunApp:33) 
at gant.Gant$_dispatch_closure5.doCall(Gant.groovy:381) 
at gant.Gant$_dispatch_closure7.doCall(Gant.groovy:415) 
at gant.Gant$_dispatch_closure7.doCall(Gant.groovy) 
at gant.Gant.withBuildListeners(Gant.groovy:427) 
at gant.Gant.this$2$withBuildListeners(Gant.groovy) 
at gant.Gant$this$2$withBuildListeners.callCurrent(Unknown Source) 
at gant.Gant.dispatch(Gant.groovy:415) 
at gant.Gant.this$2$dispatch(Gant.groovy) 
at gant.Gant.invokeMethod(Gant.groovy) 
at gant.Gant.executeTargets(Gant.groovy:590) 
at gant.Gant.executeTargets(Gant.groovy:589) 
Caused by: groovy.lang.MissingMethodException: No signature of method: static lrnmeta.MetaThangs.doMetaThangs() is applicable for argument types:() values: [] 
Possible solutions: doMetaThangs() 
at BootStrap$_closure1.doCall(BootStrap.groovy:5) 
... 26 more 
Application context shutting down... 
Application context shutdown. 

「doMetaThangs()」の代わりに「doMetaThangs()」と入力する必要があります。

UPDATE:@mkoryak回答に基づいて私はMetaThangs.groovyのメソッド宣言を変更しようとしている:

static def doMetaThangs(){ 
    ... 
} 

最初は動作しませんでしたが、結局それは周りに来ました。

答えて

1

doMetaThangsは静的ではありませんが、それをそのまま呼び出しています。

静的修飾子をメソッドに追加するか、クラスではなくクラスのインスタンスで呼び出します。

+0

「メソッドに静的修飾子を追加するにはどうすればよいですか? – Mikey

+0

私はこれらの解決方法を知りません。 – Mikey

+0

@Mikey例外メッセージが示すように、静的な関数をstaticの前に置くことで静的にします。インスタンス上のメソッドを呼び出すには、インスタンスを作成し、 '' foo ".toUpperCase()'のようにメソッドを呼び出します。あまりにも多くのことをする前に一歩前に戻って、いくつかの基本的なJava/Groovyを理解したいかもしれません。 –

関連する問題