web-dev-qa-db-ja.com

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

私たちはJSFプロジェクトを開発している3人であり、JSFに参加したことはありません。奇妙なことに、SVNから同じデータをチェックアウトすると、Tomcat 7.0.27を使用するたびにチームメンバーの1人が404エラーを受け取ります。

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

Eclipseによってプロジェクト(およびおそらくクラスパス)に含まれているJSF実装としてMojarra 2.0.3を使用しています。

実際、com.Sun.faces.config.ConfigureListenerにはweb.xmlのエントリがあります

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

誰かがエラーを探すための出発点を持っていますか?また、追加情報が必要な場合はお知らせください。

16
Wolfgang Gaar

JSFは通常、本格的なJava GlassFish、JBoss AS/EAP、WildFly、WebSphere、WebLogicなどのEEアプリケーションサーバーにバンドルされています。ただし、TomcatはバンドルのみのJSP /サーブレットコンテナです。 JSPおよびサーブレットAPI、JSF APIはありません。

TomcatでJSFを使用する場合は、/WEB-INF/libフォルダーにJSFライブラリとwebappをバンドルするか、JSFライブラリを/libに配置してTomcatにJSFをインストールする必要があります。フォルダ。明らかに、そのアプリケーションは実際のJava EEアプリケーションサーバー用に設計されているため、/WEB-INF/libにJSFライブラリをバンドルしていません。

利用可能な2つのJSF実装、 MojarraMyFaces があります。 com.Sun.facesパッケージはMojarraを示しているため、そのパッケージをダウンロードして、webappのランタイムクラスパス(つまり、webappの/WEB-INF/libまたはTomcatの/lib)に配置します。


もう1つの考えられる原因は、Mojarraの代わりにMyFacesを使用するJava EEアプリケーションサーバーにプロジェクトをデプロイしたが、プロジェクトは明らかにMojarra向けに開発されたためです。そのリスナーはMojarra固有です。場合は、<listener>からweb.xmlエントリ全体を削除することをお勧めします。

いずれにしても、MojarraのConfigureListenerweb.xmlに明示的に登録する必要があるのは、MojarraのTLDファイルでリスナーを見つけられなかったGlassFish v3やJettyなどの古いバグのあるサーバーを回避するためだけです。適切なサーバーに展開する場合、<listener>エントリ全体は不要です。

こちらもご覧ください:

41
BalusC