0

同時に2つのプロジェクトを担当しています。1 つ目 (A) はライブラリで、2 つ目 (B) は JBoss AS 7.1 で動作する Java EE プロジェクトです。

B には A のライブラリが必要です。どちらも Eclipse Juno を使用して作成されています。

A プロジェクトを WEB-INF/lib フォルダーに jar として含めることができました。「再発行」すると、A.jar が自動的にコンパイルされ、WEB-INF/lib フォルダーに含まれます。

しかし、A からライブラリを呼び出すページをロードしたい場合、ANoClassDefFoundErrorのクラスに があります。

4

2 に答える 2

1

NOClassDefFoundErrorは、JVMまたはClassLoaderインスタンスがクラスの定義を読み込もうとし、実行時に適切な定義が見つからない場合にスローされます。

したがって、Bモジュールに必要なものとは異なる古い(または間違った)バージョンのクラスをライブラリAにパッケージ化したかどうかを確認します(典型的な例は、クラスが見つかったが、メソッドがない場合です)。アプリケーションの呼び出し元が必要とする定義)。

一方、デフォルトでは、JBossは統合されたクラスローダーとJava Parent委任を使用するため、ライブラリは同じJBossインスタンス内の複数のモジュールにデプロイされますが、JBossは1つだけをロードし(モジュール間で共有します)、優先します。親に含まれているものに。複数のモジュールが同じライブラリの異なるバージョンを使用する必要がある場合、これは予期しない動作につながる可能性があります。したがって、JBossインスタンスにライブラリAの複数のバージョンがデプロイされているかどうかも確認してください。

于 2013-01-04T09:42:31.003 に答える
1

NoClassDefFoundError は、クラスがコンパイル時に使用可能であるが、実行時に見つからない場合に発生しました。A.jar が WEB-INF/lib に適切にコピーされていることを確認した場合は、不足しているクラスがその jar 内にない可能性があります。A.jar を抽出するなどして内部を確認し、欠落しているクラスが内部にあるかどうかを確認してください。

于 2013-01-04T08:35:12.227 に答える