从Eclipse运行Maven应用程序的所有Servlet上的ClassNotFoundException

时间:2012-09-21 14:45:24

标签: java eclipse jsf tomcat maven

我意识到有类似的问题,但我不知所措。我有一个maven,JSF2 webapp,无论什么 - 什么都不会在Eclipse中运行在Tomcat上。我已经尝试了许多人提到的"Deployment Assembly" trick和“build path trick”,但都没有效果。

我相信它与C:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps中的输出无关。当我将war部署到同一个tomcat实例(包括所有属性文件,xhtml文件和libs)时,此目录模仿部署的内容。唯一的例外是我的war包含.class文件,而源.java文件包含wtpwebapps。直接部署到tomcat可以正常工作 - 找到并加载所有servlet。

在我获得JSF2安装的答案之前,它不是......当Tomcat尝试加载我的自定义servlet时,我收到错误。例如:

Sep 21, 2012 10:16:27 AM org.apache.catalina.core.StandardContext loadOnStartup
SEVERE: Servlet /webapp threw load() exception
java.lang.ClassNotFoundException: com.webapp.ui.Log4JInitServlet
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1711)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556)
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:532)
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:514)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:133)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1136)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1080)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5027)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5314)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
    at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:722)

在上面的堆栈中,可以在...\wtpwebapps\webapp\WEB-INF\classes\com\webapp\ui\Log4JInitServlet.java

中找到Log4JInitServlet类

一些细节:

  • Eclipse Juno
  • Eclipse WTP 3.4.0,带有“org.eclipse.jst.web_core.feature的WTP补丁”
  • Maven 3.0.3
  • Tomcat 7.0.29
  • JSF - MyFaces 2.1.5
  • JDK - 1.7.0_05

作为最后一个FYI,我尝试过旧版本的Eclipse以及旧版本的Tomcat(回到6)。

1 个答案:

答案 0 :(得分:1)

你不应该在WEB-INF / classes中有一个.java文件;这就是.class文件中编译的字节代码的位置。

您的Eclipse项目应该在/ src目录中包含.java源文件。然后,您要求它将已编译的.class文件写入爆炸或打包的WAR文件及其WEB-INF / classes文件夹。