Я прочитал все другие сообщения SO об этой проблеме, но ни один из них не касается верблюда и applicationContext.xml. Я нахожусь на своем пути, поскольку я пытаюсь понять это уже более недели.
Проблема: я могу запустить приложение GWT через Tomcat 6 просто отлично. Но как только я попытаюсь выполнить его через Eclipse с помощью "Запустить как веб-приложение", я получаю этот вывод на консоль:
[WARN] Server class 'org.springframework.web.context.ContextLoaderListener' could not be found in the web app, but was found on the system classpath
[WARN] Adding classpath entry 'file:/C:/company/m2/repo/org/springframework/spring-web/2.5.6/spring-web-2.5.6.jar' to the web app classpath for this session
[WARN] Server resource 'log4j.properties' could not be found in the web app, but was found on the system classpath
[WARN] Adding classpath entry 'file:/C:/company/projects/svn/reco/services/portal/trunk/portal-trunk/portal-um/src/test/resources/' to the web app classpath for this session
[WARN] Server class 'com.company.session.PortalSessionListener' could not be found in the web app, but was found on the system classpath
[WARN] Adding classpath entry 'file:/C:/company/m2/repo/serviceUtil/serviceUtil/trunk/serviceUtil-trunk.jar' to the web app classpath for this session
[WARN] Server class 'org.springframework.context.ApplicationContextException' could not be found in the web app, but was found on the system classpath
[WARN] Adding classpath entry 'file:/C:/company/m2/repo/org/springframework/spring-context/2.5.6/spring-context-2.5.6.jar' to the web app classpath for this session
[WARN] Server class 'org.springframework.beans.FatalBeanException' could not be found in the web app, but was found on the system classpath
[WARN] Adding classpath entry 'file:/C:/company/m2/repo/org/springframework/spring-beans/2.5.6/spring-beans-2.5.6.jar' to the web app classpath for this session
[WARN] Server class 'org.springframework.core.NestedRuntimeException' could not be found in the web app, but was found on the system classpath
[WARN] Adding classpath entry 'file:/C:/company/m2/repo/org/springframework/spring-core/2.5.6/spring-core-2.5.6.jar' to the web app classpath for this session
[WARN] Server class 'org.apache.commons.collections.map.CaseInsensitiveMap' could not be found in the web app, but was found on the system classpath
[WARN] Adding classpath entry 'file:/C:/company/m2/repo/com/google/gwt/gwt-dev/2.4.0/gwt-dev-2.4.0.jar' to the web app classpath for this session
Starting Jetty on port 8888
[WARN] Failed startup of context com.google.gwt.dev.shell.jetty.JettyLauncher$WebAppContextWithReload@192232de{/,C:\company\projects\svn\reco\services\portal\trunk\portal-trunk\portal-entrypoint\target\portal-entrypoint-trunk}
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://camel.apache.org/schema/spring]
Offending resource: ServletContext resource [/WEB-INF/applicationContext.xml]
at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68)
at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85)
at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:80)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.error(BeanDefinitionParserDelegate.java:281)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1294)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1287)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:135)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:92)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:507)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:398)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:342)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:310)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149)
at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:124)
at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:92)
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:123)
at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:422)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:352)
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45)
at org.mortbay.jetty.handler.ContextHandler.startContext(ContextHandler.java:543)
at org.mortbay.jetty.servlet.Context.startContext(Context.java:136)
at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1220)
at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:513)
at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:448)
at com.google.gwt.dev.shell.jetty.JettyLauncher$WebAppContextWithReload.doStart(JettyLauncher.java:468)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39)
at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
at org.mortbay.jetty.handler.RequestLogHandler.doStart(RequestLogHandler.java:115)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39)
at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
at org.mortbay.jetty.Server.doStart(Server.java:222)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39)
at com.google.gwt.dev.shell.jetty.JettyLauncher.start(JettyLauncher.java:672)
at com.google.gwt.dev.DevMode.doStartUpServer(DevMode.java:509)
at com.google.gwt.dev.DevModeBase.startUp(DevModeBase.java:1068)
at com.google.gwt.dev.DevModeBase.run(DevModeBase.java:811)
at com.google.gwt.dev.DevMode.main(DevMode.java:311)
Я понятия не имею, что с этим делать, и ни у кого из моих коллег. Я также не знаю, какую другую информацию следует включить в этот пост.
Забыл обновить с моим решением. Оказывается, что в моих свойствах проекта в Google > Web Application
War Directory:
не указывал правильно в моем каталоге WAR. Я изменил его, указав на target/ROOT
и теперь все работает отлично.
При запуске приложения GWT из Eclipse в режиме dev он использует путь к классам, определенный в настройке отладки. Это путь сборки кода, который вы используете для компиляции, плюс любые другие банки или папки, которые вы добавили вручную. Кроме того, поскольку это веб-приложение, оно также будет использовать любые банки в папке WEB-INF/lib.
Когда вы получите сообщение
[WARN] Класс сервера "org.springframework.web.context.ContextLoaderListener" не найден в веб-приложении, но был найден в системном пути к классам [WARN] Добавление файла пути к файлам: /C: /company/m2/repo/org/springframework/spring-web/2.5.6/spring-web-2.5.6.jar 'к пути к классу веб-приложений для этого сеанса
то это означает, что код не может быть найден в папке WEB-INF/lib, но был найден в пути к классам, как определено вашей конфигурацией отладки. Режим GWT dev добавит эту банку в ваш запущенный путь класса веб-приложений.
Как правило, все это прекрасно работает, но если ваш код зависит от классов, которые динамически ищутся с помощью своего рода механизма поиска в классе, этот процесс не работает. Это то, что происходит здесь - обработчик пространства имен и связанная с ним схема будут в банке верблюда, но это не относится к вашему пути к классам.
Ответ прост - просто добавьте банку, содержащую обработчик пространства имен, в папку WEB-INF/lib.
У меня эта проблема много - в основном с весной, но и с библиотекой RSS Rome. Мой проект построен с использованием Maven и для управления этим я настроил Maven с профилем devmode, который включает все зависимости, которые мне нужны, с целью, которая копирует все мои зависимости в папку WEB-INF/lib. Это означает, что я могу управлять всеми моими зависимостями от Maven - полезно при совместном использовании проекта.
Похоже, что ваше затмение "запускается как приложение для веб-приложений" использует Jetty вместо tomcat и, как-то, приводит к другой конфигурации класса. По внешнему виду вы, вероятно, пропустите несколько банок (связанных с верблюдом) на пристани.
Это обычно происходит, если вы не используете управление зависимостями, например maven, то есть: вам необходимо сознательно управлять тем, какой путь/не включен в ваш путь к классам в какой среде.
Более простой подход заключается в использовании одного и того же контейнера для производства и разработки, а также для обеспечения дополнительной банки, которая вам нужна, включена в WEB-INF/lib, объявив ее в maven pom.
portal-entrypoint/src/main/webapp/WEB-INF
, но в ней нет папки lib. Затем есть один вportal-entrypoint/target/ROOT/WEB-INF
и эта папка содержит папку deploy и lib вместе сportal-entrypoint/target/ROOT/WEB-INF
. И, наконец, есть один вportal-entrypoint/target/portal-entrypoint-trunk/WEB-INF
, но есть только классы и папки развертывания. Нет папки lib. И все эти местоположения содержатapplicationContext.xml
иweb.xml
.