#java #jsf-2 #tomcat7
#java #jsf-2 #tomcat7
Вопрос:
Я пишу веб-приложение, используя JSF 2. Я скачал mojarra-2.1.3-FCS-binary.zip и myfaces-core-assembly-2.1.3-bin.zip , и с каждой библиотекой я получаю следующее исключение:
java.lang.NoClassDefFoundError: javax/faces/application/ApplicationFactory
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1663)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at javax.faces.FactoryFinder.getImplGivenPreviousImpl(FactoryFinder.java:591)
at javax.faces.FactoryFinder.getImplementationInstance(FactoryFinder.java:482)
at javax.faces.FactoryFinder.access$400(FactoryFinder.java:138)
at javax.faces.FactoryFinder$FactoryManager.getFactory(FactoryFinder.java:959)
at javax.faces.FactoryFinder.getFactory(FactoryFinder.java:316)
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:4723)
at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5226)
at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5221)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.ClassNotFoundException: javax.faces.application.ApplicationFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
... 34 more
Для Mojarra я включил javax.faces.jar
в WEB-INF/lib
папку, а для MyFaces я заменил jar следующим: myfaces-api-2.1.3.jar , myfaces-bundle-2.1.3.jar , myfaces-impl-2.1.3.jar .
Я включил jstl-api-1.2.jar а также jstl-impl-1.2.jar .
И ApplicationFactory
находится в этих банках. В чем проблема с JSF в этих случаях?
Я использую Tomcat 7 для запуска своего веб-приложения.
Комментарии:
1. Вы пытались найти библиотеки в разделе «/ apache-tomcat-7 / lib»?
2. @Mhh Лекер, банки, упомянутые в вопросе, содержат классы. Однако он не «регистрируется» при запуске приложения.
Ответ №1:
Это исключение предполагает, что API Mojarra был загружен из выделенного сервером загрузчика классов, в то время как реализация Mojarra / MyFaces загружается из выделенного веб-приложения загрузчика классов. Удалите банки Mojarra из Tomcat/lib
, JRE/lib
, JRE/lib/ext
и / или Tomcat common lib и, в конечном итоге, все места в пути к классам среды выполнения webapp, отличные от /WEB-INF/lib
.
Комментарии:
1. Я дважды проверил, и
javax.faces.jar
это найдено только в моейWEB-INF
папке. Я запускаю Tomcat 7.0.20.2.
jsf-api.jar
?javaee.jar
? Подумайте об этом, есть ли у вас какие-либо специфические / связанные<listener>
с JSFweb.xml
? На какую версию сервлета настроено вашеweb.xml
корневое объявление?3.
jboss-seam.jar
Имеет ли какое-либо отношение к конфликту?4.
jsf-api.jar
,javaee.jar
не найден ни в каких «системных»lib
папках, а версия Serlvet — 3.0. и у меня еще не указан ни один слушатель.5. Нашел его. Похоже, это
jboss-seam.jar
создает конфликт с моим приложением. Спасибо, БалусК.