ClassNotFoundException DispatcherServlet при запуске Tomcat (зависимости Maven, не скопированные в WTPWebApps)

StackOverflow https://stackoverflow.com/questions/4777026

Вопрос

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

Проблема - у меня есть Spring 3 WebApp, который я хочу использовать опцию «Запустить на сервере» в Eclipse для запуска на сервере Tomcat 7. С некоторыми проектами это просто работает, но некоторые, кажется, попадают в разбитое состояние, в результате чего каждый раз, когда сервер запускается, я получаю класс, который не найден: org.springframework.web.servlet.dispatcherservlet.

После некоторого расследования я узнал, что зависимости Maven в проекте не были скопированы в WEB-INF/lib в ${PROJECT_LOCATION}/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/

Я пробовал много вещей, прежде чем, наконец, заметил, что в проекте есть предупреждение на панели проблем:

Classpath entry org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER 
will not be exported or published. Runtime ClassNotFoundExceptions may result.

Возможно, я должен был заметить это раньше.

В любом случае, выбор этого и выполнение «быстрого решения» решает проблему, и я могу с радостью запустить свой проект. Быстрое исправление - «отметьте связанную запись в классе RAW как зависимость от публикации/экспорта».

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

Спасибо за вашу помощь.

Это было полезно?

Решение

Взгляните на раздел «Сборка развертывания» в разделе «Свойства проекта». Содержание этой страницы указывает, как должен быть собран ваш проект в запущенное приложение. В частности, это место, где вы можете контролировать, какую из библиотек, которые ссылается ваш проект, должен быть упакован в него. Выберите Add -> Java Build Reports. Вы сможете выбрать среди существующих записей пути сборки, чтобы включить в сборку.

Быстрое решение, которое вы нашли, сделало то же самое для вас. Если вам интересно, что происходит под обложками, посмотрите на свой файл .classpath до и после быстрого решения. Quick Fix течет записи ClassPath с некоторой информацией об сборке.

Другие советы

Проверьте .class file и замените следующую запись

**<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER" />**

С ниже:-

**<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER">
  <attributes>
    <attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
  </attributes>
</classpathentry>**

Это сработало для меня.

Кажется, вы должны дополнительно установить Интеграция Maven для WTP плагин. Его описание можно найти в Проблемы.sonatype.org.

Я столкнулся с этой проблемой сегодня, над проектом, который долгое время работал. Я попробовал все вышеперечисленные решения, но (1) я не видел предупреждения на панели проблем, как у плаката; (2) мои записи по сборке Java Assembly Assembly Java не показывали ничего, что еще доступно для развертывания; (3) Запись .classpath для org.eclipse.jst.component.pendendency уже была там; и (4) у меня уже была интеграция Maven для установленной WTP. Я наконец-то удалил свой проект с сервера Tomcat, а затем повторно развернул его, и проблема исчезла.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top