简体   繁体   English

java.lang.NoClassDefFoundError: javax/faces/context/FacesContextFactory

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

All similar questions didn't help me, so I'm creating my own:所有类似的问题都没有帮助我,所以我正在创建自己的:

I'm creating a JSF Webapp with Maven in Eclipse.我正在 Eclipse 中使用 Maven 创建一个 JSF Webapp。 To test it, I run it as a Maven build with the war:war goal, this works without errors.为了测试它,我将它作为带有 war:war 目标的 Maven 构建运行,这没有错误。 However, when I deploy the war-file to my local tomcat to test it, I get the following error message during startup:但是,当我将 war 文件部署到本地 tomcat 进行测试时,我在启动过程中收到以下错误消息:

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>

and plugins:和插件:

<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!谢谢!

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.此问题表明您在运行时类路径中的其他位置有另一个 JSF API 库,它由 JRE 或 Tomcat 本身而不是由 webapp 加载。 This way the webapp-supplied JSF impl library can't find the right API, resulting in exactly this exception+trace.这样 webapp 提供的 JSF impl 库找不到正确的 API,导致这个异常+跟踪。

In other words, the runtime classpath is dirty.换句话说,运行时类路径是脏的。 Cleanup it.清理它。 Get rid of JARs randomly placed in wrong places.摆脱随机放置在错误位置的 JAR。 This covers among others Tomcat's own /lib folder, the JRE's /lib and /lib/ext folders.这包括 Tomcat 自己的/lib文件夹、JRE 的/lib/lib/ext文件夹。 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.另一方面,如果您确保从不将 JAR 随机放置在 Web 应用程序的运行时类路径覆盖的文件夹中,那么一切都应该没问题。

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.另一个潜在原因是您在 web 应用程序本身中提供了多个不同版本的 JSF API 库,但此信息在当前形式的问题中不可见。 Exploring the /WEB-INF/lib folder of the Maven-built WAR file must give clues.探索 Maven 构建的 WAR 文件的/WEB-INF/lib文件夹必须提供线索。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 java.lang.NoClassDefFoundError: javax/faces/FacesException - java.lang.NoClassDefFoundError: javax/faces/FacesException Fitnesse java.lang.NoClassDefFoundError:javax / faces / validator / ValidatorException - Fitnesse java.lang.NoClassDefFoundError: javax/faces/validator/ValidatorException weblogic java.lang.IllegalStateException:找不到工厂javax.faces.context.FacesContextFactory的备份。 - weblogic java.lang.IllegalStateException: Could not find backup for factory javax.faces.context.FacesContextFactory. java.lang.NoClassDefFoundError:javax / validation / Validator - java.lang.NoClassDefFoundError: javax/validation/Validator java.lang.NoClassDefFoundError:javax / activation / DataContentHandler - java.lang.NoClassDefFoundError: javax/activation/DataContentHandler java.lang.NoClassDefFoundError:javax / ejb / EJBObject - java.lang.NoClassDefFoundError: javax/ejb/EJBObject java.lang.NoClassDefFoundError:javax / mail / MessagingException - java.lang.NoClassDefFoundError: javax/mail/MessagingException java.lang.NoClassDefFoundError: javax/el/ELManager - java.lang.NoClassDefFoundError: javax/el/ELManager java.lang.NoClassDefFoundError:javax / persistence / Persistence - java.lang.NoClassDefFoundError: javax/persistence/Persistence java.lang.NoClassDefFoundError:javax / persistence / SharedCacheMode - java.lang.NoClassDefFoundError: javax/persistence/SharedCacheMode
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM