Проблема Spring NamespaceHandler при запуске приложения GWT на основе Maven из Eclipse IDE после перехода на Spring 3 - PullRequest
9 голосов
/ 11 марта 2011

Вот проблема, с которой я застрял уже несколько часов, и сейчас я чувствую себя довольно отчаянно. Я перенес наше приложение из Spring 2.5 / Hiberante 3.3 в Spring 3.0.5 / Hibernate 3.6. Было сделано следующее:

  • обновлены зависимости / версия Spring (теперь есть не только несколько зависимостей)
  • обновлены зависимости Hibernate / версия
  • обновлены XML-файлы контекста Spring в терминах версий для "schemaLocation"

Ошибка, возникающая при запуске из Eclipse IDE после различных незначительных исправлений и изменений, выглядит следующим образом:

Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/tx]

Я просмотрел другие потоки и понял, что такая проблема возникает, когда конкретная библиотека (в данном случае spring-tx) не найдена в classpath, но я ясно вижу ее в моих зависимостях Maven.

Следующее, что я сделал, я построил WAR , как я делал это для предыдущих версий, развернул его на Tomcat, и приложение работало отлично !

По этому я могу сделать вывод, что чего-то не хватает в конфигурации среды Eclipse. Что интересно, все жалобы касаются Spring-TX, - когда я удалил одну строку, используя пространство имен TX <tx:annotation-driven transaction-manager="transactionManager" /> .. приложение запустилось нормально без жалоб на другие пространства имен (конечно, оно не работало нормально, но, по крайней мере, не было никаких жалоб во время инициализации).

Краткое описание моей IDE / настройки проекта:

  • запуск приложения с помощью файла GWT .launch (GWT ver 2.0.3)
  • в этом файле запуска есть ссылки на другие проекты, в том числе на стороне сервера с пружинными зависимостями
  • на самом деле этот проект gwt-client имеет POM на стороне сервера в качестве родителя, и в результате я вижу все зависимости Spring в зависимостях Maven этого проекта
  • В проекте GWT-клиента есть /war/WEB-INF/applicationContext.xml, который импортирует другие контекстные XML-ресурсы, которые фактически используют spring-tx

Формальным вопросом будет: каковы возможные причины, по которым запуск проекта из IDE приводит к таким ошибкам после перехода на Spring 3x (и работает нормально при развертывании как встроенной WAR)?

Я не ожидаю прямых ответов (если у кого-то не было точно такой же среды и проблемы), но советы, советы будут очень полезны!

EDIT Забыл упомянуть, что во время запуска приложения из IDE у меня появляется куча предупреждений, подобных этим:

[WARN] Server class 'javax.persistence.EntityManagerFactory' could not be found in the web app, but was found on the system classpath
   [WARN] Adding classpath entry 'file:/D:/maven/repository/org/hibernate/javax/persistence/hibernate-jpa-2.0-api/1.0.0.Final/hibernate-jpa-2.0-api-1.0.0.Final.jar' to the web app classpath for this session
[WARN] Server class 'org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor' could not be found in the web app, but was found on the system classpath
   [WARN] Adding classpath entry 'file:/D:/maven/repository/org/springframework/spring-orm/3.0.5.RELEASE/spring-orm-3.0.5.RELEASE.jar' to the web app classpath for this session

.. так, может быть, spring-tx также не найден в веб-приложении (и обнаружен в системном пути к классам), но он не добавлен, как это случилось с другими? Что может быть причиной такого поведения?

Ответы [ 2 ]

1 голос
/ 31 августа 2011

Если у вас есть несколько зависимостей Spring в вашем classpath, то вы можете столкнуться с этой проблемой с maven:

При использовании нескольких зависимостей Spring файлы из META-INF (из Spring jars) перезаписывать друг друга в исполняемом jar-with-dependencies

Чтобы исправить это, см. комментарий от Chris Wilkes .Вам необходимо скопировать spring.handlers и spring.schemas в каталог META-INF.

1 голос
/ 26 июля 2011

При разработке с Maven вам следует запустить DevMode из папки target/${project.finalName}, после вызова mvn package или просто mvn war:exploded (что скопирует ваши зависимости в WEB-INF/lib там).
См http://code.google.com/eclipse/docs/faq.html#gwt_with_maven и http://code.google.com/p/google-web-toolkit/issues/detail?id=6619

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...