Развернутое WAR-приложение Tomcat 7 выдает ошибку NoClassDefFoundError

Я работаю над веб-приложением типа привет-мир. Я использую Eclipse Helios в качестве среды IDE, Maven 2 для обработки зависимостей и локальный сервер Tomcat 7 для развертывания и тестирования. Приложение основано на Spring MVC и использует Hibernate для управления данными.

Я могу успешно упаковать проект в файл WAR. Когда я развертываю WAR в Tomcat, в журналах сообщается о следующей ошибке:

СЕРЬЕЗНО: не удалось инициализировать контекст

org.springframework.beans.factory.BeanCreationException: ошибка при создании bean-компонента с именем «hibernateSessionFactory», определенным в ресурсе ServletContext [/WEB-INF/spring-servlet.xml]: не удалось вызвать метод инициализации; вложенным исключением является java.lang.NoClassDefFoundError: не удалось инициализировать класс org.hibernate.cfg.AnnotationConfiguration в

org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1338) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473) в org.springframework.beans support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409) и т. д.

Я проверил, чтобы убедиться, что правильная зависимость включена в мой POM, и это:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-annotations</artifactId>
    <version>3.4.0.GA</version>
    <type>jar</type>
    <optional>false</optional>
</dependency>

Я проверил, чтобы убедиться, что в упакованном файле WAR есть требуемый файл JAR, в котором упоминается класс (org.hibernate.cfg.AnnotationConfiguration) в ошибке, и он делает:

./Tomcat 7/webapps/helloworld/WEB-INF/lib/hibernate-annotations-3.4.0.GA.jar

Основываясь на этой информации, я полагаю, что это может быть проблема с конфигурацией пути к классам. Из документации, которую я прочитал на Tomcat 7, Tomcat должен иметь возможность использовать файлы JAR в папке «/WEB-INF/lib». Кто-нибудь знает, возможно, я пропустил шаг в настройке Tomcat, чтобы он распознал файлы JAR в папке lib веб-приложения?


person chicagoCrazy    schedule 18.01.2011    source источник
comment
Метод, который я использую для упаковки веб-приложения: mvn clean package. Я также попытался перейти к представлению сервера Eclipse и добавил свой сервер Tomcat 7. Таким образом я могу обойти NoClassDefFoundError. Я все еще хотел бы знать, почему Tomcat 7 не будет использовать файлы JAR в Tomcat 7.0/webapps/‹webapp-name›/WEB-INF/lib, когда я упаковываю его с помощью mvn clean package.   -  person chicagoCrazy    schedule 20.01.2011


Ответы (1)


Я понимаю, что это общий совет, но у меня были подобные проблемы в прошлом как с Tomcat, так и с Jetty, и это было из-за того, что у меня было несколько/неправильных версий некоторой зависимости. Я бы начал с использования редактора M2Eclipse POM в Eclipse, щелкнул «Иерархия зависимостей» и внимательно рассмотрел все переходные зависимости.

person HDave    schedule 24.01.2011
comment
Я нашел дубликат одной из моих зависимостей Maven с разными версиями (javax.server, servlet-api). Когда я удалил старую зависимость, Tomcat запустился без моей ранее упомянутой ошибки. Спасибо за помощь, HDave! - person chicagoCrazy; 25.01.2011
comment
Пожалуйста... конечно, хотелось бы, чтобы Eclipse/Maven автоматически предупреждал о таких вещах. Не стесняйтесь также ставить галочку в ответе! - person HDave; 25.01.2011