Различие в поведении Grails между run-app и run-war

Я относительно новичок в Groovy и Grails и пробую их в свое свободное время. У меня есть небольшое тестовое приложение Grails, которое я могу нормально запускать, используя grails run-app, но grails run-war приводит к ошибке.

в grails-app/conf/BootStrip.init метод, я добавляю некоторые свойства get на DefaultGrailsControllerClass а также DefaultGrailsApplication:

DefaultGrailsControllerClass.metaClass.getMenuText = { ->
    getPropertyOrStaticPropertyOrFieldValue('menuText', String.class)
}
DefaultGrailsControllerClass.metaClass.getMenuOrder = { ->
    getPropertyOrStaticPropertyOrFieldValue('menuOrder', Integer.class)
}
DefaultGrailsApplication.metaClass.getMenuControllerClasses = { ->
    controllerClasses.findAll { it.menuText != null }.sort { it.menuOrder }
}

В моем grails-app/views/layouts/main.gspЯ использую это:

<g:each var="c" in="${ grailsApplication.menuControllerClasses }">
    <li><g:link controller="${c.logicalPropertyName}">${c.menuText}</g:link></li>
</g:each>

Это прекрасно работает под run-app, но работает под run-warЯ получаю следующее:

groovy.lang.MissingPropertyException: Нет такого свойства: menuControllerClasses для класса: org.codehaus.groovy.grails.commons.DefaultGrailsApplication

Я попробовал это под Grails 1.1.1 и 1.2-M1 и получил тот же результат. Я подтвердил, что BootStrap.init метод вызывается (через println), но изменения, внесенные в metaClass кажется, не взять под run-war,

Есть идеи, что мне не хватает?

1 ответ

Grails Run-War - Запустите приложение WAR Grails в Причал

grails run-app - запускает приложение Grails в Jetty

Разница в том, что run-war не поддерживает перезагрузку, как run-app.

Не уверен, что вам не хватает.

Другие вопросы по тегам