java.lang.ClassNotFoundException: com.sun.faces.config.ConfigureListener

Мы три человека, разрабатывающие проект JSF, и мы раньше не были в JSF. Как ни странно, с теми же данными, извлеченными из SVN, один из членов команды получает ошибку 404 каждый раз, используя Tomcat 7.0.27.

Во время запуска Tomcat (используется внутри Eclipse) записывается следующий журнал:

01.06.2012 11:45:16 org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: ......
01.06.2012 11:45:16 org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:SnapManCloud' did not find a matching property.
01.06.2012 11:45:16 org.apache.coyote.AbstractProtocolHandler init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
01.06.2012 11:45:16 org.apache.coyote.AbstractProtocolHandler init
INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
01.06.2012 11:45:16 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 677 ms
01.06.2012 11:45:16 org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
01.06.2012 11:45:16 org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.12
01.06.2012 11:45:17 org.apache.catalina.core.StandardContext listenerStart
FATAL: Error configuring application listener of class com.sun.faces.config.ConfigureListener
java.lang.ClassNotFoundException: com.sun.faces.config.ConfigureListener
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1676)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521)
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:415)
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:397)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:118)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4638)
    at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5204)
    at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5199)
    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)
01.06.2012 11:45:17 org.apache.catalina.core.StandardContext listenerStart
FATAL: Skipped installing application listeners due to previous error(s)
01.06.2012 11:45:17 org.apache.catalina.core.StandardContext startInternal
FATAL: Error listenerStart
01.06.2012 11:45:17 org.apache.catalina.core.StandardContext startInternal
FATAL: Context [/SnapManCloud] startup failed due to previous errors
01.06.2012 11:45:17 org.apache.coyote.AbstractProtocolHandler start
INFO: Starting ProtocolHandler ["http-bio-8080"]
01.06.2012 11:45:17 org.apache.coyote.AbstractProtocolHandler start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
01.06.2012 11:45:17 org.apache.catalina.startup.Catalina start
INFO: Server startup in 1279 ms

Мы используем Mojarra 2.0.3 в качестве JSF-реализации, которая была включена Eclipse в проект (и предположительно в путь к классам).

Действительно есть запись дляcom.sun.faces.config.ConfigureListener вweb.xml

<listener>
     <listener-class>com.sun.faces.config.ConfigureListener</listener-class>
</listener>

У кого-нибудь есть отправная точка, где искать ошибку? Кроме того, если требуется дополнительная информация, пожалуйста, дайте мне знать.

Ответы на вопрос(1)

Решение Вопроса

таких как GlassFish, JBoss AS / EAP, WildFly, WebSphere, WebLogic и т. Д. Однако Tomcat - это пустой контейнер JSP / Servlet, который объединяет только API-интерфейсы JSP и Servlet, но не JSF API.

Если вы хотите использовать JSF в Tomcat, то вам нужно объединить библиотеки JSF вместе с веб-приложением в его/WEB-INF/lib или установить JSF в Tomcat, поместив библиотеки JSF в его/lib папка. Очевидно, что это приложение предназначено для реальных серверов приложений Java EE и поэтому не связывает библиотеки JSF в/WEB-INF/lib.

Есть две реализации JSF, Mojarra а также MyFaces.com.sun.faces package указывает на Mojarra, поэтому скачайте его и поместите в путь к классу времени веб-приложения (то есть либо в @-файле веб-приложения/WEB-INF/lib или в Tomcat's/lib).

Другой возможной причиной является то, что вы развернули проект на сервере приложений Java EE, который использует MyFaces вместо Mojarra, тогда как проект, по-видимому, изначально разрабатывался для Mojarra. Этот слушатель - именно Мохарра. В таком случае лучше удалить весь<listener> запись отweb.xml.

В любом случае, явная регистрация МохаррыConfigureListener вweb.xml фактически необходим только для обхода старых неисправных серверов, таких как GlassFish v3 и Jetty, которые не смогли найти слушателя в файле TLD Mojarra. При развертывании на достойном сервере, весь<listener> запись не нужна.

Смотрите также Конфигурация com.sun.faces.config.ConfigureListener java.lang.ClassNotFoundException: com.sun.faces.config.ConfigureListener при использовании MyFaces с WASCE / Geronimo
 problemofficer12 сент. 2015 г., 17:46
Можете ли вы добавить инструкции о том, как добавить загруженный .jar Mojarra в проект, используя Eclipse? Это было бы очень полезно.
 Wolfgang Gaar01 июн. 2012 г., 19:30
Отбрасывание банок JSF в Tomcat's/lib помог. Спасибо
 BalusC13 сент. 2015 г., 00:15
@ problemofficer: из ответа: "поместите его в путь к классу во время выполнения веб-приложения (т.е. либо в / WEB-INF / lib веб-приложения, либо в / lib Tomcat)". Поместить его в папку проекта / WEB-INF / lib обычным способом.

Ваш ответ на вопрос