(作業中の) wicket プロジェクトを新しい開発マシンにチェックアウトしたところ、jetty を起動しようとすると突然このエラーが発生します。
java.lang.NoClassDefFoundError: net/unbewaff/Start
Caused by: java.lang.ClassNotFoundException: net.unbewaff.Start
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Exception in thread "main"
クラスファイルはそこにあり、ファイルを削除するとEclipseが再構築します。見つからないクラスは、実行しようとしているメイン メソッドを含むクラスであり、埋め込まれた桟橋を開始するはずです。ディレクトリにcdしてファイルを表示java Start.class
し、コマンドラインに入力しても、わずかに異なる表現で同じエラーが発生します。
Wicket と組み込みの桟橋 - classNotFoundExceptionは関連しているように見えますが、記載されているエラーが後で発生し、Start クラスをロードした後に発生するため、そうではありません。
私がしたこと:
- リポジトリからプロジェクトをチェックアウトしました
- mvn clean install を実行しました
- mvn eclipse:eclipse を実行しました
- Eclipseでプロジェクトを作成しました
- アプリを起動しようとした
- 壁に当たる
正直なところ、これは改札や桟橋の問題ではないと思いますが、どちらも何らかの形で関係しているので、この問題を解決した人がいるといいのですが...
私がチェックしたこと:
- ファイルは本当にそこにあり、最新で読み取り可能です
- 運悪くバイトコード呼び出しを調べてみました
javap Start.class
(ERROR:Could not find Start.class
) - テキストエディタを使用してクラスファイルを開きました(「適切なバイナリ」に見えます)
- running
mvn jetty:run
(webapp と一緒に jetty を起動して実行します)
何が役に立ったか:
Martijn が示唆したように、私は新鮮なクイックスタートを入手し、Start クラスを比較しました。クイックスタートのものは問題なく機能し、差分ツールと私が見つけた唯一の違いはコネクタのポートの変更でしたが、クイックスタートのクラスはこれらを問題なく受け入れました。次に、クラスをクイックスタートからプロジェクトにコピーすると、Dummy.java という名前で正常に動作しました。問題のあるクラスを削除し、ワークスペースをクリーンアップして名前を Start.java に変更すると、機能しなくなりました。名前をダミーに戻すと、動作状態に戻ります。
そのため、何が問題なのかまだわかりませんが、回避策がありました。