NoClassDefFoundError при запуске проекта Tomcat + Spring + Maven (Eclipse) - PullRequest
2 голосов
/ 20 июля 2011

Что я получаю:

java.lang.NoClassDefFoundError: com/mongodb/DB
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2427)
at java.lang.Class.getDeclaredMethods(Class.java:1791)
at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:446)
at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:430)
at org.springframework.util.ReflectionUtils.getAllDeclaredMethods(ReflectionUtils.java:475)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getTypeForFactoryMethod(AbstractAutowireCapableBeanFactory.java:634)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:573)
at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1319)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:315)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:394)
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:594)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:407)
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:442)
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:458)
at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:339)
at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:306)
at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:127)
at javax.servlet.GenericServlet.init(GenericServlet.java:212)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1173)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:993)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4420)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4733)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
at org.apache.catalina.core.StandardService.start(StandardService.java:525)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)

Этот класс находится в банке Maven (из хранилища M2). Я добавил Maven Dependencies в DeploymentAssembly (перед тем, как я это сделал, я получил: java.lang.ClassNotFoundException: org.springframework.web.filter.CharacterEncodingFilter). Я использую плагин m2e, и мой проект настроен как проект Maven. Мое приложение развернуто в стандартном месте /.metadata/.plugins/.../tmp0. Внутри WEB-INF / lib у меня есть все необходимые банки. Проект компилируется без ошибок. Что я могу сделать не так?

Одним из квази-решений является добавление необходимых библиотек в каталог Tomcat lib, но я не хочу этого делать. Я хочу заставить Tomcat использовать библиотеки проектов.

Ответы [ 2 ]

6 голосов
/ 17 февраля 2012

У меня возникла похожая проблема при попытке запустить образцы mcv-ajax и mvc-basic , распространяемые с Spring 3 (оба доступны на https://src.springframework.org/svn/spring-samples - нужен клиент SVN для их загрузки, что-то вроде TortoiseSVN).

Я получал это ClassNotFoundException в моем журнале запуска Tomcat6.

SEVERE: Exception starting filter characterEncodingFilter java.lang.ClassNotFoundException: org.springframework.web.filter.CharacterEncodingFilter
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:269)
    at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:422)
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:115)
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4071)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4725)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
    at org.apache.catalina.core.StandardService.start(StandardService.java:525)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Feb 17, 2012 10:36:18 AM org.apache.catalina.core.StandardContext start
SEVERE: Error filterStart
Feb 17, 2012 10:36:18 AM org.apache.catalina.core.StandardContext start
SEVERE: Context [/mvc-basic] startup failed due to previous errors

Я мог запустить оба MavenЧистые и Maven Install цели, без ошибок, и в проекте не было ошибок classpath.Я также установил eclipse Maven Integration для WTP , доступный в пакете Maven Integration для Eclipse Extras , в соответствии с инструкциями здесь , но все же не повезло ...

Проблема в моем случае может быть видна на вкладке Маркеры в Eclipse как предупреждение (желтый восклицательный знак) с описанием Сообщение валидатора зависимости от пути к классу иФактическая проблема записи classpath org.eclipse.maven2_classpath.container не будет экспортирована или опубликована.Время выполнения ClassNotFoundExceptions может привести к.

Для решения этой проблемы

  1. щелкните правой кнопкой мыши описание проблемы и выберите быстрое исправление.
  2. Выбрать Пометить связанную необработанную запись пути к классу как зависимость публикации / экспорта
  3. Нажмите Готово
  4. Выполните maven-clean и a maven-install
  5. Щелкните правой кнопкой мыши по проекту, выберите «Запустить на сервере».Выберите сервер Tomcat для запуска, и вы должны увидеть начальную страницу.

Заключение Описанные выше шаги помогли мне успешно запустить проект в моей среде разработки Eclispe.Пожалуйста, попробуйте, чтобы увидеть, будет ли он работать для вас.

Альтернативное решение, которое также, кажется, работает:

  1. удалить проект из затмения, включая всесвязанные файлы в рабочей области.(также удалите каталог проекта из рабочей области)
  2. Еще раз проверьте проект из SVN в рабочую область
  3. Импортируйте новый проект в Eclipse, но выберите Maven \ Existing Maven Project
  4. Выберите проект с диска и импортируйте.

С уважением,

ta6hbe

0 голосов
/ 20 июля 2011

Похоже, вы не установили интеграцию m2eclipse WTP.

Если так, то это может быть источником неправильного развертывания. Когда WTP-интеграция установлена, вам не нужно ничего менять в дескрипторе развертывания - плагин должен настроить ваш проект автоматически. Если нет, попробуйте RMB -> Maven -> Обновить конфигурацию проекта, но сначала обязательно установите интеграцию WTP.

...