1

我意识到那里有类似的问题,但我不知所措。我有一个 Maven,JSF2 webapp,无论如何都不会在 Eclipse 中的 Tomcat 上运行。我已经尝试过许多人提到的 “部署程序集”技巧和“构建路径技巧”,但都不起作用。

我相信它与C:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps. 这个目录模拟了当我将战争部署到同一个 tomcat 实例(包括所有属性文件、xhtml 文件和库)时所部署的内容。唯一的例外是我的战争包含 .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)

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

一些细节:

  • 日蚀朱诺
  • 带有“org.eclipse.jst.web_core.feature 的 WTP 补丁”的 Eclipse WTP 3.4.0
  • Maven 3.0.3
  • 雄猫 7.0.29
  • JSF - MyFaces 2.1.5
  • JDK - 1.7.0_05

作为最后的仅供参考,我已经尝试过旧版本的 Eclipse 以及旧版本的 Tomcat(回到 6)。

4

1 回答 1

1

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

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

于 2012-09-21T14:46:40.960 回答