10

そこで、Eclipse から正しくビルドおよびデバッグする Web サービス プロジェクト (単なる動的 Web プロジェクト) から始めました。共有ライブラリに入れたい共通コードのチャンクを取り出したので、これらのクラスは、Web プロジェクトが参照する別の jar プロジェクトに入ります。

Web プロジェクトでは、Project->Properties->Java Build Path->Projects->Add を実行し、jar プロジェクトを追加しました。これにより、コンパイル時のクラスパスの問題がすべて正しく解決され、すべてが正常にビルドされます。しかし、実行時に Tomcat サーバーが起動すると、Spring は jar ファイルに含まれるいくつかのクラスを注入しようとし、NoClassDefFoundError が発生します。

.class ファイルとプロパティ ファイル、および META-INF ディレクトリの内容が ./build ディレクトリに表示されますが、WEB-INF/lib ディレクトリはインプレースで参照されているようで、jar 依存関係がコピーされません。 Web アプリ ライブラリの一部として表示されます。

他のjarプロジェクトが実行時にTomcatで利用可能である必要があることをEclipseに伝える魔法の呪文は何ですか? Ant ビルド スクリプトから、最初に他のプロジェクトを WEB-INF/lib にビルドするだけで、すべて正常に動作しますが、Eclipse のデバッグには使用できません。

4

2 に答える 2

10

しばらく時間を費やした後、私はこれを理解しました。Eclipse Helios を使用している場合は、properties > deployment assembly > add > project追加する依存プロジェクトに移動して選択します。

于 2011-10-26T19:51:56.343 に答える
9

Java EE モジュールの依存関係は、この問題を解決します。おそらく他のプロジェクトがこれらのクラスに依存しているため、共通クラスを独自のプロジェクトに抽出するタスクは既に完了しています。いずれにせよ、これが単なる Java プロジェクトではなく、ユーティリティ プロジェクト (プロジェクト ウィザードの Java EE の下に表示される) であることを確認する必要があります。これが完了したら、把握したように、Utility プロジェクトをビルド パス (コンパイル時のパス) に追加することができます。

追加の (最後の) ステップは、動的 Web プロジェクトと共有ライブラリーの間に Java EE モジュールの依存関係を確立することです。これにより、デプロイメント中、さらには WAR のエクスポート中にも、ユーティリティーのクラスが WEB-INF\lib に配置されます。これを行うには、動的 Web プロジェクトのプロパティにアクセスし、Java EE モジュールの依存関係を参照します。ここでユーティリティ プロジェクトが選択されていることを確認します。アプリケーションを再デプロイ/公開すれば、準備完了です。

于 2008-11-28T21:44:43.853 に答える