私は GWT プロジェクトを持っており、別のプロジェクトのいくつかのクラスをサーバー側で使用したいと考えています。
MyServerProject
com.me.myserverproject.server.Horse
SomeSupportProject
com.me.somesupportproject.server.Animal
MyServerProject Horse.java は次のようになります。
class Horse extends Animal {
}
Eclipse では、SomeSupportProject プロジェクトを参照する MyServerProject があります。すべてが正常にコンパイルされ、GWT コンパイルも正常に実行され、エラーは発生しません。
MyServerProject をローカル インスタンスにデプロイすると、すぐに "Animal.java" で NoClassDefFoundError エラーがスローされます。
java.lang.NoClassDefFoundError: com/me/somesupportproject/server/Animal
at java.lang.ClassLoader.defineClass1(Native Method)
Eclipse プロジェクトのプロパティで SomeSupportProject をエクスポート済みとしてマークしました。しかし、デプロイ時に Animal.java のクラス ファイルがエクスポートされないようです。それを機能させるために、ここで何か特別なことをする必要がありますか?
これはかなり基本的なものなので、本当に明白な何かが欠けているに違いありません。クライアント側の Java ファイルが問題なく参照されていますが、これはよりトリッキーなケースだと思います。しかし、これらはすべてサーバー側のクラスであり、より単純になると考えられていました。
ありがとう
------- 更新: プロジェクトのセットアップ ---------------
私の環境に関するいくつかのメモ:
Eclipse を使用すると、2 つのプロジェクトが並んでいます。Ant や Maven は使用していません。私はEclipseを自動的にビルドするように設定しているので、コンパイルエラーは発生しません。実際にデプロイ用にコンパイルするには、「MyServerProject」を右クリックして、Google -> GWT Compile を選択してみました。出力を「すべて」に設定しました。コンパイルエラーは発生しません。出力には、警告は記載されていません。
GWT コンパイルが完了したら、プロジェクトをもう一度右クリックし、[Run As] -> [Web Application] を選択します。これは、SomeSupportProject プロジェクトで見つかったクラスに対して java.lang.NoClassDefFoundError をスローするものです。
役立つ詳細があれば、私に知らせてください。
--------- 最終更新: 解決済み -----
これにさらに取り組んだ後、プロジェクト参照を追加して、デプロイされた最上位プロジェクトでサーバー側クラスを取得することができないようです。代わりに、SomeSupportProject の「src」フォルダーにリンクしました。これにより、通常どおりコンパイルできますが、プロジェクトをデプロイすると、すべてのクラスが問題なく検出されます。
したがって、これは実際にはアプリ エンジンの問題であり、代わりにその下にタグ付けする必要がありました。
ありがとう!