わかりました、ここに状況があります:
3 つのファイルがあります。 1. TScan.java 2. Test.java 3. ScanServlet.java
TScan.java ファイルにメール クラス TScan を記述します。そのクラス内には、TEntry というネストされたクラス (サブクラスではない) があります。TScan には、テストに使用される main() と、ネストされた TEntry クラスを問題なく使用するその他のメソッドがあります。
また、Test.java は、TScan および TEntry クラスを含む TScan.java の項目を問題なく使用する、より洗練されたテスト プログラムです。TScan.java と Test.java は Eclipse で開発およびテストされました (コマンド ラインからも正常にコンパイル/実行されます)。
そのため、TScan は有用な点まで機能しており、私はそれを Web アプリケーションに含めたいと考えていました。Jetty をインストールし、Jetty で実行される ScanServlet.java を作成しましたが、問題はありませんでした。
TScan の参照を開始すると、TScan に対して上記のエラーが発生し始めました。TScan.class ファイルを含めるように ClassPath を変更してもうまくいかなかったので、JAR ファイルを作成して WebApp の WEB-INF/lib/ フォルダーに貼り付けたところ、ScanServlet は filen をコンパイルし、実行時に TScan を見つけたようです-time ですが、実行時に NoClassDefFounfError TScan$TEntry が発生します。以下の理由から、これは私には意味がありません。 TScan を除いて直接参照)、スタンドアロン モードで正常に動作します! 3. TEntry を公開しましたが、まだ動作しません。
NoClassDefFoundError に関する多くの質問を見つけましたが、ネストされたクラス、特に Jetty を扱っているものはありません。
私は、コンパイルすれば実行される Delphi に慣れていることを覚えておいてください。(そして多かれ少なかれ同じであるABAP)。
誰かが解決策を持っている場合、私はわくわくします。そうでない場合は、次のことを検討しています:
- TScan 全体を ScanServlet にコピーして貼り付けます (同じファイル内にある場合は、問題なく見つけることができるはずです!) (あまりモジュール化されていません)
- TEntry を別の .java ファイル内の別のクラスに移動しますか? (きれいに抽出するのは面倒かもしれません)。
- ScanServlet で TScan.Java をコマンド ライン プログラムとして呼び出します。(遅い...)