java.lang.NoClassDefFoundError:javax/faces/context/FacesContextFactory [英] java.lang.NoClassDefFoundError: javax/faces/context/FacesContextFactory

查看:107
本文介绍了java.lang.NoClassDefFoundError:javax/faces/context/FacesContextFactory的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所有类似的问题都无济于事,所以我创建了自己的问题:

All similar questions didn't help me, so I'm creating my own:

我正在用Eclipse中的Maven创建一个JSF Webapp.为了对其进行测试,我将其作为具有war:war目标的Maven构建进行运行,这可以正常工作.但是,当我将war文件部署到本地tomcat进行测试时,在启动过程中会收到以下错误消息:

I'm creating a JSF Webapp with Maven in Eclipse. To test it, I run it as a Maven build with the war:war goal, this works without errors. However, when I deploy the war-file to my local tomcat to test it, I get the following error message during startup:

SCHWERWIEGEND: Critical error during deployment:
java.lang.NoClassDefFoundError: javax/faces/context/FacesContextFactory
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:270)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1701)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:270)
        at javax.faces.FactoryFinder.getImplGivenPreviousImpl(FactoryFinder.java:618)
        at javax.faces.FactoryFinder.getImplementationInstance(FactoryFinder.java:509)
        at javax.faces.FactoryFinder.access$400(FactoryFinder.java:139)
        at javax.faces.FactoryFinder$FactoryManager.getFactory(FactoryFinder.java:993)
        at javax.faces.FactoryFinder.getFactory(FactoryFinder.java:343)
        at com.sun.faces.config.processor.FactoryConfigProcessor.verifyFactoriesExist(FactoryConfigProcessor.java:303)
        at com.sun.faces.config.processor.FactoryConfigProcessor.process(FactoryConfigProcessor.java:219)
        at com.sun.faces.config.ConfigManager.initialize(ConfigManager.java:360)

        at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:225)
        at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4939)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)

        at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:976)

        at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1653)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
        at java.util.concurrent.FutureTask.run(FutureTask.java:262)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: javax.faces.context.FacesContextFactory
        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
        ... 39 more

我具有以下依赖性...

I have the following dependencies...

<dependencies>
  <dependency>
    <groupId>com.sun.faces</groupId>
    <artifactId>jsf-api</artifactId>
    <version>2.1.7</version>
  </dependency>
  <dependency>
    <groupId>com.sun.faces</groupId>
    <artifactId>jsf-impl</artifactId>
    <version>2.1.7</version>
  </dependency>
</dependencies>

和插件:

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.3.1</version>
        <configuration>
            <source>1.6</source>
            <target>1.6</target>
        </configuration>
    </plugin>
    <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.3</version>
    </plugin>
</plugins>

如果您需要更多信息,请告诉我.谢谢!

If you need further information, let me know. Thanks!

推荐答案

此问题表明您在运行时类路径中的其他位置有另一个JSF API库,该库由JRE或Tomcat本身而不是由Webapp加载.这样,Web应用程序提供的JSF impl库无法找到正确的API,从而导致出现此异常+跟踪.

This problem suggests that you've another JSF API library somewhere else in the runtime classpath which is loaded by the JRE or Tomcat itself instead of by the webapp. This way the webapp-supplied JSF impl library can't find the right API, resulting in exactly this exception+trace.

换句话说,运行时类路径很脏.清理它.摆脱随机放置在错误位置的JAR.其中包括Tomcat自己的/lib文件夹,JRE的/lib/lib/ext文件夹.另一方面,如果您确保从未将JAR随机放置在webapp运行时类路径所覆盖的文件夹中,那么一切应该都很好.

In other words, the runtime classpath is dirty. Cleanup it. Get rid of JARs randomly placed in wrong places. This covers among others Tomcat's own /lib folder, the JRE's /lib and /lib/ext folders. On the other hand, if you make sure that you never randomly put JARs in folders covered by the webapp's runtime classpath, then everything should be well.

另一个潜在的原因是,您在Web应用程序中提供了多个不同版本的JSF API库,但是此信息在当前形式的问题中不可见.浏览Maven构建的WAR文件的/WEB-INF/lib文件夹必须提供线索.

Another potential cause is that you're shipping multiple different versioned JSF API libraries in the webapp itself, but this information is not visible in the question in its current form. Exploring the /WEB-INF/lib folder of the Maven-built WAR file must give clues.

这篇关于java.lang.NoClassDefFoundError:javax/faces/context/FacesContextFactory的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆