ClassNotFoundException启动Tomcat时的DispatcherServlet(Maven依赖项未复制到wtpwebapps)

Rus*_*ell 25 java eclipse tomcat maven classnotfoundexception

我曾经遇到过这个问题几次而且只是偶然发现了一个(半)可靠的解决方案,所以我想在这里发布它以防万一它可以帮助其他人,或者万一我忘了它,还要问是否有人知道根本原因是什么以及我的修复工作原因.

问题 - 我有一个spring 3 webapp,我想在Eclipse中使用Run on Server选项在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.
Run Code Online (Sandbox Code Playgroud)

也许我应该早点注意到这一点.

无论如何,选择这个并执行"快速修复"可以解决问题,我可以愉快地运行我的项目.快速解决方法是:"将关联的原始类路径条目标记为发布/导出依赖项".

麻烦的是,虽然这有效,但我不知道这意味着什么.完成后,我的项目配置中看不到任何明显的变化.我很想知道实际问题是什么,以及我是否可以避免它再次发生.我还想知道是否有一些我本可以完成的事情(除了执行快速修复之外)可以修复它,因为我觉得我几乎尝试了其他一切.

谢谢你的帮助.

Kon*_*hik 34

查看项目属性下的"部署程序集"部分.此页面的内容指定了如何将项目组装到正在运行的应用程序中.特别是,您可以在此处控制项目引用的库应与其打包.选择Add - > Java Build Path Entries.您将能够在现有的构建路径条目中进行选择以包含在程序集中.

你找到的快速修复程序对你做了同样的事情.如果您对封底下发生的事情感到好奇,请在快速修复之前和之后查看.classpath文件.快速修复使用一些程序集信息标记类路径条目.