3

WARファイルをTomcat5.5にデプロイしており、WEB-INF \ classesに.classesファイルが含まれている場合は正常に機能しますが、その.classesを含む.jarファイルをWEB-INF \ libに移動すると、実行時に例外が発生します。 java.lang.NoSuchMethodErrorと文句を言いますが、.jarファイル内の既存のクラスファイルにはクラスが含まれており、メソッドは終了します。

これに関する助けをいただければ幸いです。

4

4 に答える 4

5

これは、クラスの競合が原因で発生する可能性があります。どこかに古いバージョンのクラス(Tomcatの共有フォルダー、WEB-INF / classes、WEB-INF / lib)がないことを確認してください。この場合、Tomcatがどのクラスをロードするかを実際に知ることはできません。メソッドなしで1つを選択すると、発生している例外が発生します。

于 2009-07-07T10:23:43.140 に答える
1

ClassNotFoundErrorではなくNoSuchMethodErrorが発生しているため、古いバージョンのクラスがどこかに(jarファイルの外に)あることを意味します。あなたはそれを見つけて削除する必要があります。

于 2009-07-07T10:26:45.163 に答える
0

これは間違いなくクラスクロシンです。http : //tomcat.apache.org/tomcat-5.5-doc/class-loader-howto.html#Class%20Loader%20Definitionsをご覧ください。

ご覧のとおり、WEB-INF/libと比較してWEB-INF/classesの下のクラスの方が優先度が高くなっています。同じ名前(およびパッケージ)の2つのクラスがあります。それらの1つが、優先度の高いクラスフォルダにある場合。それらが両方ともlibフォルダーにある場合、2番目のものが最初に取得されます(jarは、アルファベット順に基づいて優先されます)

これはあなたの状況を説明することができます。

お役に立てば幸いです-ヨナタン

于 2009-07-08T12:11:50.410 に答える
0

Webアプリケーションの観点から、クラスまたはリソースのロードは、次のリポジトリをこの順序で調べます。

JVM
システムのブートストラップクラスクラスローダークラス(上記)
/ WEB-INF /Webアプリケーションのクラス
/WEB-INF/lib/*.jarWebアプリケーション
共通クラスローダークラス(上記)

「Commonclassloader」によって検索される場所は、$ CATALINA_BASE / conf/catalina.propertiesのcommon.loaderプロパティによって定義されます。ここで、共有の場所を有効化/定義します。
shared.loader = $ {catalina.base} / shared / classes、$ {catalina.base} /shared/lib/*.jar

そして、上記の順序は、あなたが直面した問題についてより多くの洞察を与えます。

于 2015-01-24T02:14:49.080 に答える