0

(Eclipse で) ローカルの Tomcat に Web アプリをデプロイすると、次のエラーで起動に失敗します。

SEVERE: クラス com.sun.faces.config.ConfigureListener のリスナー インスタンスにコンテキスト初期化イベントを送信する例外

java.lang.LinkageError: ローダー制約違反: インターフェイス メソッド "javax.servlet.jsp.JspApplicationContext.addELResolver(Ljavax/el/ELResolver;) を解決するとき

現在のクラス com/sun/faces/config/ConfigureListener のクラス ローダー (org/apache/catalina/loader/WebappClassLoader のインスタンス)、および解決済みのクラス ローダー (org/apache/catalina/loader/StandardClassLoader のインスタンス)クラス、javax/servlet/jsp/JspApplicationContext には、タイプ p.JspApplicationContext.addELResolver(Ljavax/el/ELResolver;) の異なる Class オブジェクトがあります。

ここで何が起こっているのですか?WEB-INF/lib にサーブレット jar があることと関係がある可能性があることは既に読みましたが、ここでは問題ではないようです。

WEB-INF/lib JAR

そこには「javax.*」jar がないのに、そのパッケージのクラスでこれが失敗するのはなぜですか?

4

2 に答える 2

4

アプリケーションから を削除しservlet-api ます。これは、webapp ディストリビューションに含めるべきではありません。

クラスの複数のインスタンスがクラスロードされないように、Tomcat (または任意のコンテナー) は独自のクラスパスからこれらのクラスを提供する必要があります。

Maven を使用している場合、これはprovided依存関係である必要があります。

于 2013-03-13T10:00:11.520 に答える
1

この問題は、ビットネスが原因で発生します。使用しているOSのビットを確認し、そのビットにjreをインストールします。tomcatはJavaアプリケーションであり、ビット性がないためです。つまり、64ビットと32ビットの両方で実行できます。

64ビットバージョンと32ビットバージョンの両方のJavaをインストールすることができます。Tomcat7インストーラーがJava732ビットがインストールされていることを検出すると(のみ)、tomcat 7をプログラムファイル(x86)ディレクトリにインストールします。ただし、Tomcat 7インストーラーは64ビットバージョンのJavaを選択し、それ自体をProgramFilesフォルダーにインストールします。

ただし、この場合、Tomcat 7が64ビットJavaを使用していると想定することはできません。これは、ユーザーがtomcat 7のインストール後に64ビットJavaを追加した可能性があり、tomcat7がその「ビット数」を32から64に変更することを知らないためです。これが起こります。

于 2013-03-22T04:44:14.587 に答える