Задача новичка Grails "Не удалось вызвать Servlet 2.5" - PullRequest
1 голос
/ 25 мая 2010

[UPDATE]

Видимо, я не единственный с этой проблемой - http://grails.1312388.n4.nabble.com/Beginner-ERROR-Failed-to-invoke-Servlet-2-5-getContextPath-method-td2222279.html. Он также появился на компьютере с Windows и в среде IDE Netbeans на OS X.

На данный момент, часть, которая меня особенно озадачивает, заключается в том, что я могу нормально запускать свои приложения Grails из Eclipse, но вторую попытку запустить их из Терминала, который они бомбят. Насколько я могу судить, они оба запускаются из каталога grails-core, так почему же он работает из Eclipse, а не из терминала?

[/ UPDATE]

Я пытаюсь настроить Grails на машине Snow Leopard. Я следовал всем инструкциям по установке grails.com и пытаюсь запустить приложение из Grails: краткое руководство Дэйва Кляйна. Я запустил grails create-app TekDays без видимых проблем и смог перейти в папку TekDays, но при попытке запустить grails run-app я получаю следующее:

Welcome to Grails 1.3.1 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: /grails

Base Directory: /apps/TekDays
Resolving dependencies...
Dependencies resolved in 4469ms.
Running script /grails/scripts/RunApp.groovy
Environment set to development
   [delete] Deleting directory /Users/name/.grails/1.3.1/projects/TekDays/tomcat
Running Grails application..
2010-05-24 21:42:39,559 [main] ERROR context.GrailsContextLoader  - Error executing bootstraps: Failed to invoke Servlet 2.5 getContextPath method
java.lang.IllegalStateException: Failed to invoke Servlet 2.5 getContextPath method
    at org.grails.tomcat.TomcatServer.start(TomcatServer.groovy:164)
    at grails.web.container.EmbeddableServer$start.call(Unknown Source)
    at _GrailsRun_groovy$_run_closure5_closure12.doCall(_GrailsRun_groovy:159)
    at _GrailsRun_groovy$_run_closure5_closure12.doCall(_GrailsRun_groovy)
    at _GrailsSettings_groovy$_run_closure10.doCall(_GrailsSettings_groovy:282)
    at _GrailsSettings_groovy$_run_closure10.call(_GrailsSettings_groovy)
    at _GrailsRun_groovy$_run_closure5.doCall(_GrailsRun_groovy:150)
    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.groovy: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: java.lang.NoSuchMethodException: javax.servlet.ServletContext.getContextPath()
    at java.lang.Class.getMethod(Class.java:1605)
    ... 23 more

Я погуглил все производные от «Не удалось вызвать сервлет 2.5», о которых я могу думать, но до сих пор не смог найти ничего, что помогло бы мне понять, но в одиночку устранить ошибку.

Любой совет, который поможет мне решить эту проблему, будет очень признателен!

Ответы [ 3 ]

1 голос
/ 09 марта 2011

Я знаю, что немного опоздал на вечеринку, но я просто смог решить эту проблему на своей машине и подумал, что поделюсь своими результатами, если кто-нибудь еще наткнется на это в Google.

Более новые версии Grails (1.3.7) включают библиотеки groovy, поэтому вам не нужно ссылаться на файлы groovy в вашем проекте. Когда я понизил версию IntelliJ с 10 до 9, я неправильно добавил ссылку на Groovy, думая, что она мне нужна. Одним из объяснений java.lang.NoSuchMethodError: javax.servlet.ServletContext.getContextPath() является то, что вы включаете библиотеки с уже объявленными методами, что, по-видимому, является проблемой для меня.

Надеюсь, это поможет кому-то еще!

0 голосов
/ 08 июня 2011

Это определенно проблема с CLASSPATH. Для меня это был селен-сервер.jar по какой-то причине, но для кого-то это может быть что-то еще.

Я бы удалил банку из CLASSPATH в моем окне оболочки (export CLASSPATH = "; C: /one/less/jar.jar;"), пока не выясню, какая баночка вызывает проблемы.

0 голосов
/ 04 июня 2010

Найдите файл jar servlet-api в / lib и удалите его.

В моем случае у меня был servlet-api-2.3.jar, который был импортирован другой зависимостью. В ошибке конкретно говорится, что getContextPath - это метод Servlet 2.5.

...