WARファイルをTomcat5.5にデプロイしており、WEB-INF \ classesに.classesファイルが含まれている場合は正常に機能しますが、その.classesを含む.jarファイルをWEB-INF \ libに移動すると、実行時に例外が発生します。 java.lang.NoSuchMethodErrorと文句を言いますが、.jarファイル内の既存のクラスファイルにはクラスが含まれており、メソッドは終了します。
これに関する助けをいただければ幸いです。
これは、クラスの競合が原因で発生する可能性があります。どこかに古いバージョンのクラス(Tomcatの共有フォルダー、WEB-INF / classes、WEB-INF / lib)がないことを確認してください。この場合、Tomcatがどのクラスをロードするかを実際に知ることはできません。メソッドなしで1つを選択すると、発生している例外が発生します。
ClassNotFoundErrorではなくNoSuchMethodErrorが発生しているため、古いバージョンのクラスがどこかに(jarファイルの外に)あることを意味します。あなたはそれを見つけて削除する必要があります。
これは間違いなくクラスクロシンです。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は、アルファベット順に基づいて優先されます)
これはあなたの状況を説明することができます。
お役に立てば幸いです-ヨナタン
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
そして、上記の順序は、あなたが直面した問題についてより多くの洞察を与えます。