Как включить Groovy в проекте Grails - PullRequest
0 голосов
/ 08 февраля 2012

Я идиот или что-то в этом роде, и я не знаю, как добавить groovy в src / groovy и заставить его работать.Допустим, у меня есть некоторые мета-вещи в моей начальной загрузке, и я хочу переместить эти вызовы в класс, который я могу вызывать из модульных тестов или где угодно, основываясь на этом вопросе: Правильный путь к метапрограмме в граалях, так что она доступна в модульных тестах

Так что, если я положу это в свой загрузчик (который имеет import myproject.* наверху), он будет работать.

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

Так что я использую STS и захожу в src / groovyи сказать «Новый 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 ()'?

ОБНОВЛЕНИЕ: на основе ответа @mkoryak я пытался изменить объявление метода вMetaThangs.groovy to:

static def doMetaThangs(){
  ...
}

Сначала это не сработало, но в конце концов оно пришло.

1 Ответ

1 голос
/ 08 февраля 2012

doMetaThangs не является статичным, но вы называете его так, как если бы оно было.

либо добавьте статический модификатор к методу, либо вызовите его для экземпляра класса, а не класса.

...