ClassNotFoundException при запуске проекта Spring + Maven2 на Tomcat 6 из Eclipse 3.5

При попытке запустить веб-проект из Eclipse я получаю:


SEVERE: Error configuring application listener of class org.springframework.web.context.ContextLoaderListener
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3877)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4429)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:722)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
    at org.apache.catalina.core.StandardService.start(StandardService.java:516)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:583)
    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:288)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)

Проект начал сбой при переключении на Fedora 12 x64. Проект работал с WinXP с той же конфигурацией.

В результате поиска я нашел сообщения, утверждающие, что переход к Project Properties → Зависимости модуля Java EE и проверка поля Maven Dependencies устраняет проблему. К сожалению, это не сработало для меня.

Я использую Spring 2.5.6, Maven2, Eclipse 3.5 (с плагином m2e 0.10.0), Tomcat 6 и Java 6, работающие на Fedora 12 x64.

Кто-нибудь видел эту проблему?

В случае, если это помогает, это мой файл .classpath


<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" output="target/classes" path="src/main/java"/>
    <classpathentry kind="src" output="target/classes" path="target/generated-sources/gpb"/>
    <classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"/>
    <classpathentry kind="src" output="target/test-classes" path="src/test/java"/>

    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>

    <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>
    <classpathentry kind="con" path="org.eclipse.iam.jdt.core.mavenClasspathContainer">
        <attributes>
            <attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>
    <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
    <classpathentry kind="output" path="target/classes"/>
</classpath>

Обновление: У меня нет проблем с созданием или запуском проекта вне Eclipse.

Ответы

Ответ 1

У вас, похоже, есть Eclipse IAM и M2Eclipse в вашем .classpath. Я бы сделал некоторую очистку:

  • Используйте только один из этих плагинов (я предлагаю использовать M2Eclipse).
  • Удалите проект из рабочей области Eclipse, удалите .classpath и .project и снова импортируйте проект как проект Maven.

Обновление: Чтобы получить поддержку WTP с помощью M2Eclipse, вам необходимо установить Интеграцию Maven для WTP с сайта обновлений m2eclipse Extras: http://download.eclipse.org/m2e-wtp/releases/, как показано ниже:

enter image description here

Ответ 2

У меня был тот же симптом с другой причиной. Мне пришлось отредактировать файл .classpath. Запись maven:

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

... отсутствовал атрибут, показанный здесь. Когда я добавил тег атрибутов, проблема исчезла. Мне очень любопытно, как настроить это в eclipse ui.

Ответ 4

Время от времени сталкивайтесь с той же проблемой.

По какой-то странной причине эта проблема может быть устранена таким образом

1) Щелкните правой кнопкой мыши по проекту Maven → Disable Maven Dependencies

2) Щелкните правой кнопкой мыши по проекту Maven → Enable Maven Dependencies