0

Tomcatにデプロイした.warファイルで、ビルド中に存在していたライブラリでNoClassDefFoundErrorが発生します。

私の.warはAntビルドスクリプトで作成されています。スクリプトには、.m2リポジトリの.pomから依存関係を取得し、それらをWEB-INF / libフォルダーに配置するカスタムターゲット(オフィスの新しいプロジェクトツールによって自動的に作成される)であると私が信じているものがあります。それらのライブラリの1つは、私がプログラミングを支援し、Mavenを使用して自分のマシン上に構築したライブラリです。歴史的な理由から、この新しいプロジェクトではAntを使用する必要があります。そのため、私はこのようにしています。

.warは正常にビルドされます。すべてのクラスが見つかりました。私はそれをtomcatにデプロイし、唯一のサーブレットコマンドを実行すると、現時点ではほとんど実行されませんが、以前に作成した.jar内のいくつかのクラスを呼び出すと、次のようになります。

exception
javax.servlet.ServletException: Servlet.init() for servlet InitLDAP threw exception
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
java.lang.Thread.run(Thread.java:619)

root cause
java.lang.NoClassDefFoundError: Could not initialize class com.myjarlibrary.ConnectionAgent
com.mywarservice.MyServlet.init(MyServlet.java:45)
javax.servlet.GenericServlet.init(GenericServlet.java:212)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
java.lang.Thread.run(Thread.java:619)

理由はわかりません。

Java6を使用して.jarと.warの両方をビルドしています。Tomcatバージョン6.0.29。.jarライブラリが呼び出されるのMyServlet.java:45はこれが初めてですが、最初に呼び出される別のライブラリがあります(log4jのみ)。フォルダを確認するwebappsと、ライブラリが本来あるべき場所にあることがわかります。他の誰かの非常に似た.war(同じ依存関係、同様にコードスパース)は同じTomcatで問題なく動作しますが、ライブラリのようにAntではなくMavenで構築されていない限り、関連する違いを見つけることができませんでしただった。

何がうまくいかない可能性がありますか?

4

1 に答える 1

3

java.lang.NoClassDefFoundError:クラスcom.myjarlibrary.ConnectionAgentを初期化できませんでした

これは、クラス自体が見つからないことを示すものではありません。それはそれ自身の紛らわしい方法で、クラスの初期化中にエラーがあると言っています。を見て、com.myjarlibrary.ConnectionAgentそのスーパークラス、静的フィールド、または静的初期化子に問題がないかどうかを確認する必要があります。それらの1つによって参照されているクラスまたはインターフェースが欠落している可能性があります。ログを調べることで、より詳細な情報を見つけることもできます。アプリケーションが書き込む可能性のあるログは言うまでもなく、catalina.outとlocalhost。*ログで追加のエラーを確認してください。

于 2013-03-12T03:20:04.760 に答える