2014-01-19 2 views
12

У меня есть простое веб-приложение, использующее сервлеты. Я создал его как проект maven, а затем импортировал его в eclipse (файл -> import -> существующие проекты maven)maven + eclipse + tomcat: class not found exception

Война корректно развертывается в tomcat 7.

Однако, когда я создаю сервер tomcat 7 в Eclipse, а затем запускаю tomcat в eclipse, я получаю исключение при запуске приложения.

root cause 

java.lang.NoClassDefFoundError: com/google/common/collect/ImmutableMap 
    first.model.BeerExpert.<clinit>(BeerExpert.java:12) 
    first.servlet.BeerServlet.doPost(BeerServlet.java:26) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:641) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
root cause 

java.lang.ClassNotFoundException: com.google.common.collect.ImmutableMap 
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1676) 
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521) 
    first.model.BeerExpert.<clinit>(BeerExpert.java:12) 
    first.servlet.BeerServlet.doPost(BeerServlet.java:26) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:641) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 

есть ли определенный класс настройки путь, который необходимо сделать в затмение/котом

Примечание: Я могу запустить MVN чистую установку, и это создает файл фляги. И затем, когда я перемещаю банку в каталог tomcat (7) webapp и перезапускаю, он работает отлично.

Я не размещаю детали pom.xml, потому что приложение само работает нормально. Однако идентификатор необходим в разрешении, я могу опубликовать его.

ответ

34

Tomcat & Spring Web - Class Not Found Exception org.springframework.web.context.ContextLoaderListener

Щелкните правой кнопкой мыши на вашем веб-проекта в окне Project Explorer -> выберите 'Свойства'. В свойствах проекта выберите «Сборка развертывания».

На странице свойств Ассамблеи развертывания отображается контент, который будет опубликован в виде собранного артефакта Eclipse на сервер. Вы должны сказать Eclipse, что вы хотите, чтобы все ваши зависимости Maven были опубликованы.

Для этого нажмите кнопку «Добавить», затем выберите «Java Build Path Entries». Нажмите «Далее» и выберите «Зависимости Maven». Это опубликует JAR-файлы зависимостей Maven в папке lib, когда Eclipse публикует ваш проект на сервере WST.

+0

Можем ли мы настроить этот параметр в файле pom? –

+2

У меня была эта же проблема, и я не мог понять, что было не так в течение двух дней. Я полагаю, что моя ситуация очень уникальна, но на всякий случай я ее оставил. Для проекта, который не был экспортирован, я перешел в «Свойства» -> «Границы проекта» и «Непроверенный служебный модуль». Был чист на Tomcat и переиздан. Так оно и было. Я чувствую, что это просто какая-то странная ошибка, но я добавляю на всякий случай, что это может помочь кому-то. – DavidR

+0

@DavidR, я боролся с этим в течение 24 часов, и вы, кажется, единственный человек в Интернете с решением. Спасибо! Если вы пробовали это без везения, сделайте это. – thomas88wp