Grails 2.4 ClassNotFoundException: Sitemesh GrailsPageFilter

Обратите внимание: этот вопрос почти дублирует вопрос это под названием "Ошибка плагина ресурсов при обновлении с grails 2.3.8 2.4", однако есть несколько отличий, которые, на мой взгляд, делают стоит задать его как отдельный вопрос:

  • В этом вопросе ни вопрос, ни ответы не объясняют, почему возникает эта ошибка, за исключением того, что используемый плагин больше не является официальным плагином Grails для загрузки sitemesh.
  • САМОЕ ВАЖНОЕ: в этом вопросе никогда не было принятого ответа или какого-либо подтверждения исходного постера о том, каким было окончательное решение. Я не буду этого делать.

Итак, я прошу вас, прежде чем вы отвергнете/закроете это как обман, указать мне, где в этом другом вопросе было предоставлено точное решение, которое также применимо к моему точному ситуация. Если вы не можете этого сделать, пожалуйста, не опускайте/закрывайте этот вопрос!

Я обновляю приложение Grails 2.3.6 до Grails 2.4.4. Когда я делаю run-app, я получаю:

Error |
2015-03-05 14:42:44,257 [localhost-startStop-1] ERROR [localhost].[/myapp]  - Exception starting filter sitemesh
java.lang.ClassNotFoundException: org.codehaus.groovy.grails.web.sitemesh.GrailsPageFilter
    at org.grails.plugins.tomcat.ParentDelegatingClassLoader.findClass(ParentDelegatingClassLoader.java:59)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:532)
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:514)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:142)
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:258)
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:105)
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4809)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5485)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Error |
2015-03-05 14:42:44,268 [localhost-startStop-1] ERROR core.StandardContext  - Error filterStart
Error |
2015-03-05 14:42:44,270 [localhost-startStop-1] ERROR core.StandardContext  - Context [/myapp] startup failed due to previous errors

Вот мой раздел плагинов BuildConfig:

plugins {
    runtime ":resources:1.2.14"
    compile 'org.grails.plugins:gson:1.1.4'
    compile ":standalone:1.3"
    build ":release:3.0.1"
    runtime ":cached-resources:1.0"
    compile ":cache-headers:1.1.7"
    compile ":yammer-metrics:3.0.1-2"
    compile ":scaffolding:2.1.2"
    compile ':cache:1.1.1'
    runtime ":hibernate:3.6.10.8" // or ":hibernate4:4.3.1.1"
    runtime ":database-migration:1.3.8"
    runtime ":jquery:1.11.1"
    test(":geb:$gebVersion")
    test(":spock:0.7") {
        exclude "spock-grails-support"
    }
}

Я не хочу использовать asset-pipeline, если этого можно избежать. Все, что я прочитал до сих пор, утверждает, что использование resources:1.2.14 делает приложение Grails 2.4.4 совместимым с подключаемым модулем ресурсов.

Может ли кто-нибудь объяснить способ использования sitemesh в Grails 2.4.4, чтобы эта ошибка исчезла? Если использование asset-pipeline неизбежно, какие точные преобразования мне нужно будет сделать в моем проекте, чтобы использовать его. Я попытался заменить плагин ресурсов последним плагином конвейера активов, например:

plugins {
    ...
    //runtime ":resources:1.2.14"
    compile ":asset-pipeline:1.8.3"
    ...
}

Но ошибка не исчезла. Мысли?


person smeeb    schedule 05.03.2015    source источник


Ответы (1)


Я не уверен, почему вы не сможете использовать подключаемый модуль ресурсов в Grails 2.4.4, но я рекомендую использовать asset-pipeline, так как он намного превосходит более старый подключаемый модуль resources. Вот очень хорошая статья, объясняющая почему (от автора плагина) и как:

Редактировать

На второй взгляд, я считаю, что это может быть проблема с несовместимым web.xml из версии 2.3.x. который имел следующее:

<filter>
    <filter-name>sitemesh</filter-name>
    <filter-class>org.codehaus.groovy.grails.web.sitemesh.GrailsPageFilter</filter-class>
</filter>

Вот ссылка на новый файл 2.4.x web.xml:

person blacktide    schedule 07.03.2015
comment
Что такое решения для Grails 4.X? Потому что в Grails 4.x.x нет файла web.xml.. @blacktide - person Asif; 25.06.2020