java.lang.NoClassDefFoundError:javax / faces / FacesException

问题描述 投票:0回答:4

我正在尝试部署一个已从 Eclipse 工作区导入到 NetBeans 的 Web 应用程序。但它没有被部署,而是给了我以下异常。

15 Jul, 2011 5:59:04 AM org.apache.catalina.core.StandardContext listenerStart
SEVERE: Exception sending context initialized event to listener instance of class org.apache.myfaces.component.html.util.StreamingDestroyerListener
java.lang.NoClassDefFoundError: javax/faces/FacesException
        at org.apache.myfaces.shared_tomahawk.config.MyfacesConfig.<clinit>(MyfacesConfig.java:80)
        at org.apache.myfaces.component.html.util.StreamingDestroyerListener.contextInitialized(StreamingDestroyerListener.java:32)
        at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3972)
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:4467)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546)
        at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:637)
        at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:521)
        at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1359)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        **at java.lang.reflect.Method.invoke(Method.java:597)**
        at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:297)
        **at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:836)
        at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:761)**
        at org.apache.catalina.manager.ManagerServlet.check(ManagerServlet.java:1500)
        at org.apache.catalina.manager.ManagerServlet.deploy(ManagerServlet.java:849)
        at org.apache.catalina.manager.ManagerServlet.doGet(ManagerServlet.java:351)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:199)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:558)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
        at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859)
        at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
        at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1555)
        **at java.lang.Thread.run(Thread.java:619)**

我是否缺少一些 JAR?

java jsf
4个回答
12
投票

NoClassDefFoundError
表示该类在编译时存在于类路径中。 Tomahawk 在代码库中的某处有一个
import javax.faces.FacesException;
行。这是核心 JSF API 的类之一。

这意味着 Web 应用程序的类路径中缺少 JSF 库。该项目位于 Netbeans 中,显然与已经与 JSF 捆绑在一起的服务器相关联,例如 Glassfish、JBoss AS 等。Eclipse 中的项目似乎与服务器没有正确关联,或者相关服务器没有 捆绑了 JSF比如 Tomcat、Jetty 等

堆栈跟踪提示您正在使用 Tomcat。您需要单独下载 JSF 并将 JAR 文件放入 web 应用程序的

/WEB-INF/lib
中(您的 Tomahawk 库也在那里)。


3
投票

是的,CNF 异常总是意味着缺少 JAR。类加载器找不到这个:

javax.faces.FacesException

您可以通过将类名剪切并粘贴到 findjar.com 来找到它,如下所示:

http://www.findjar.com/index.x?query=javax.faces.FacesException


0
投票

添加不同的体验:当我遇到这个问题时,是因为我正在使用 ICEFaces 并且已将 ICEFaces jar 包含在 Tomcat 的

$CATALINA_BASE/lib
目录中,但将
javax.faces.jar
包含在我的 webapp 的
/WEB-INF/lib
目录中。我的解决方案是将
javax.faces.jar
/WEB-INF/lib
移至
$CATALINA_BASE/lib
。另外,如果您使用 ICEFaces 之类的工具,请确保使用正确版本的
javax.faces.jar


0
投票

我通过从 POM 中删除

jsf-api
jsf-impl
上提供的范围解决了这个问题,因此 Maven 现在可以在 Catalina 启动时生成这两个 jar。

© www.soinside.com 2019 - 2024. All rights reserved.