ClassNotFoundException DispatcherServlet при запуске Tomcat (зависимости Maven не копируются в wtpwebapps) - PullRequest
25 голосов
/ 24 января 2011

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

Проблема - у меня есть веб-приложение Spring 3, в котором я хочу использовать опцию Run on Server в 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.

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

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

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

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

Ответы [ 4 ]

34 голосов
/ 24 января 2011

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

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

2 голосов
/ 26 сентября 2011

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

**<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>**

У меня это сработало.

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

Кажется, вам нужно дополнительно установить Maven Integration для WTP плагин. Его описание можно найти по адресу Issues.sonatype.org .

0 голосов
/ 20 августа 2018

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

...