2015-05-08 7 views
1

Я пытаюсь использовать spring-mvc. Создайте проект maven, добавьте зависимость. Я использую tomcat 7 и затмение luna. И у меня это исключение:Tomcat, java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet

java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571) at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:506) at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:488) at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:115) at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1148) at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1087) at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5262) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5550) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1575) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1565) at java.util.concurrent.FutureTask.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source)

Я пытался найти решение этой проблемы. Но все найденные мной решения идентичны, что-то вроде этого: https://stackoverflow.com/a/12910916/3601615 , но это меня не помогло. Может быть, я сделал что-то не так?

это мой П файл зависимости:

<dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
     <version>4.1.4.RELEASE</version> 
     <scope>provided</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
     <version>4.1.4.RELEASE</version> 
     <scope>provided</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-web</artifactId> 
     <version>4.1.4.RELEASE</version> 
     <scope>provided</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>4.1.4.RELEASE</version> 
     <scope>provided</scope> 
    </dependency> 

и моя web.xml:

<servlet> 
    <servlet-name>HelloWeb</servlet-name> 
    <servlet-class> 
     org.springframework.web.servlet.DispatcherServlet 
    </servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>HelloWeb</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

+1

Я думаю, вы должны использовать ' compile'. –

ответ

3

Удалить <scope>provided</scope> из любой зависимости, разве предоставленной кота. Этот тег сохраняет maven от экспорта зависимости. Он используется для зависимостей, которые предоставляются целевой системой и не нужно экспортировать (в вашем случае любая lib найдена в tomcat7dir/lib).

+0

спасибо, исключение исчезло – Ales

0

Вы должны использовать область «предоставляется» только тогда, когда вам известно, что ваша папка tomcat lib уже имеет эту библиотеку. В противном случае вы можете столкнуться с проблемами, если в пути к классам будет один и тот же банд. В вашем случае вы должны использовать область «компиляция», которая по умолчанию.

От Maven documenation - Предоставлено: Это очень похоже на компиляцию, но означает, что вы ожидаете в JDK или контейнер, чтобы обеспечить зависимость во время выполнения. Например, при создании веб-приложения для Java Enterprise Edition вы должны установить зависимость от API-интерфейса Servlet и связанных с ним API-интерфейсов Java EE для области видимости, поскольку веб-контейнер предоставляет эти классы. Эта область видимости доступна только в классе компиляции и теста, и не является транзитивной.