2014-01-19 62 views
12

我有一个使用servlet的简单web应用程序。我创建它作为一个maven项目,然后将其导入到eclipse(文件 - >导入 - >现有的Maven项目)maven + eclipse + tomcat:类没有发现异常

战争部署到tomcat 7正确。

但是,当我在Eclipse中创建一个tomcat 7服务器,然后在eclipse中启动tomcat时,我运行该应用程序时出现异常。

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) 

是否有需要在eclipse/tomcat的做

注意任何特定的类路径设置:我能够运行mvn全新安装,它会创建jar文件。然后,当我将jar移动到tomcat(7)webapp目录并重新启动时,它工作得很好。

我不发布pom.xml的细节,因为应用程序本身工作正常。但是,它是需要在决议我可以发布它。

回答

34

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

鼠标右键单击在项目资源管理器Web项目 - >选择 '属性'。在项目属性下,选择“部署程序集”。

部署组件属性页面显示将作为Eclipse的已装配工件发布到服务器的内容。您需要告诉Eclipse您希望所有Maven依赖项都被发布。

要做到这一点,请点击'添加'按钮,然后选择'Java Build Path Entries'。点击Next并选择Maven Dependencies。当Eclipse将项目发布到WST服务器时,这会将Maven依赖项JAR文件发布到lib文件夹

+0

我们可以在pom文件中配置此设置吗? –

+2

我有这个相同的问题,无法弄清楚两天有什么问题。我想我的情况非常独特,但我为了以防万一。对于没有被导出的项目,我去了Properties - > Project Facets和未选中的Utility Module。在Tomcat上干净并重新发布。那样做了。我觉得这只是一个奇怪的错误,但是为了以防万一,它可以帮助某人。 – DavidR

+0

@DavidR,我一直在为此奋斗24小时,而你似乎是互联网上唯一一个使用该解决方案的人。谢谢!如果你尝试了上面的运气,没有运气,请给这个镜头。 – thomas88wp