2
Mar 03, 2013 12:09:05 PM org.apache.catalina.core.ApplicationContext log
INFO: Marking servlet Faces Servlet as unavailable
Mar 03, 2013 12:09:05 PM org.apache.catalina.core.StandardContext loadOnStartup
SEVERE: Servlet /mavenproject1 threw load() exception
java.lang.ClassNotFoundException: javax.faces.webapp.FacesServlet
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1713)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1558)
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:527)
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:509)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:137)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1144)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1088)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5033)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5317)
    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.deployDescriptor(HostConfig.java:657)
    at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1637)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
    at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:722)

Facesサーブレットを使用してアプリケーションをデプロイしようとすると、このスタックトレースが取得されます。これは、利用可能なFacesServletがないことを意味しますが、これらのライブラリはWARで利用可能であるため、明らかにそうではありません。

  • jsf-api-2.2.0-m09.jar
  • jsf-impl-2.2.0-m09.jar
  • javaee-web-api-6.0.jar

何が悪いのかわかりません。タイトルにあるように、私はTomcat7.0.37で実行しています。

4

1 に答える 1

3

問題はである可能性が最も高いjavaee-web-api-6.0.jarです。このjarにはjavax.servlet.*クラスが含まれています。そして、Tomcatがこのjarでそれらを見つけると、クラスローディングのためにjarをブロックします。これは、このjarのクラスをまったくロードできないことを意味します。その中にあるものを含みjavax.faces.webapp.FacesServletます。サーブレット仕様(3.0)のセクション10.7.2を参照してください。

コンテナがWARにサーブレットをロードするために使用するクラスローダーは、開発者がgetResourceを使用して通常のJava SEセマンティクスに従って、WAR内のライブラリJARに含まれるすべてのリソースをロードできるようにする必要があります。Java EEライセンス契約に記載されているように、Java EE製品の一部ではないサーブレットコンテナは、JavaSEが行うjava。*およびjavax。*ネームスペースなどのJavaSEプラットフォームクラスをアプリケーションがオーバーライドできないようにする必要があります。変更を許可しません。コンテナは、アプリケーションがコンテナの実装クラスをオーバーライドまたはアクセスすることを許可してはなりません。また、アプリケーションクラスローダーを実装して、WAR内にパッケージ化されたクラスとリソースが、コンテナー全体のライブラリJARに存在するクラスとリソースよりも優先してロードされるようにすることをお勧めします。実装は、コンテナにデプロイされたすべてのWebアプリケーションについて、Thread.currentThread.getContextClassLoader()の呼び出しが、このセクションで指定されたコントラクトを実装するClassLoaderインスタンスを返さなければならないことも保証する必要があります。さらに、ClassLoaderインスタンスは、デプロイされたWebアプリケーションごとに個別のインスタンスである必要があります。コンテナは、Webアプリケーションにコールバック(リスナーコールバックを含む)を作成する前に、上記のようにスレッドコンテキストClassLoaderを設定し、コールバックが戻ったら元のClassLoaderに戻す必要があります。

依存関係をクリーンアップしてください!

于 2013-03-03T15:21:01.273 に答える