SpringSource Tools Suite(STS、EclipseのバリアントIDE)を最新バージョン(v3.6.1)にアップグレードしました。その後、すべてのJUnit単体テストを再度実行できなくなりました。このエラーが発生する:
Class not found ClassToTest
Java.lang.ClassNotFoundException: ClassToTest
at Java.net.URLClassLoader$1.run(URLClassLoader.Java:200)
at Java.security.AccessController.doPrivileged(Native Method)
at Java.net.URLClassLoader.findClass(URLClassLoader.Java:188)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:307)
at Sun.misc.Launcher$AppClassLoader.loadClass(Launcher.Java:268)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:252)
このブログによると: Eclipse内でJUnitユニットテストを実行するときのClassNotFoundException(Mavenを使用) 、これはEclipseでのMavenプラグインの設定ミスが原因です。ただし、STS 3.6.2では、Mavenプラグインにこのオプション「モジュールを含める」が見つかりません。この問題を修正して単体テストを再度有効にするにはどうすればよいですか?
OK、私はこの質問に自分で答えなければならないようです。
この問題の主な理由は、依然としてm2EclipseEclipseプラグインです。このプラグインの新しいバージョンは、1つのプロジェクトでネストされたモジュールをサポートしていません。本当に複数のモジュールを表示する必要がある場合は、パッケージエクスプローラーから古いモジュールを削除し、ワーキングセットを作成して、[既存のMavenプロジェクトをインポートする]オプションを使用してプロジェクトを再度インポートする必要があります。 Eclipseインポートウィザードがウィンドウをポップアップし、インポートするモジュールを尋ねます。次に、すべてのモジュールを選択して、インポートを完了できます。その結果、ワーキングセットにはプロジェクトのすべてのモジュールが含まれ、各モジュールは個別のプロジェクトとして扱われますが、ワークスペースではモジュールは1つのプロジェクトにあります。これを行うことで、クラスを検索できない、単体テストを実行してJava.lang.ClassNotFoundExceptionを取得できないなど、クラスパスに関連してEclipseで発生したすべての問題が解決されます。
参考までに、ワーキングセットの作成方法を説明する記事を次に示します。 ワーキングセット
新しいワーキングセットを作成せずにプロジェクトをインポートできると思いますが、ワーキングセットはプロジェクトに属するすべてのモジュールを1つのセットに保持するため、整理が容易です。
2か月前に答えがあったらいいのに、解決策を探すのにあまり時間をかけなかったでしょう。
現在のm2eプラグインにはまだいくつかのバックドローがあります。ユニットテストケースは、ワーキングセットにグループ化されたプロジェクトを含むため実行できませんでした。以下が役立つ場合があります。
その後、テストを再実行してみてください。
私は解決策を見つけたと思います、少なくともこれは私にとってはうまくいきました:プロジェクトを右クリックして「Maven」->「UpdateDependencies」を選択します
次に、試したところ、ClassNotFoundExceptionが発生しませんでした。
ここや他の投稿で言及されているすべてを試しました。人々が提供した解決策のいくつかは次のとおりです。
たくさんありましたが、私が見つけたのは次のとおりです。
何時間もキーボードに頭をぶつけて、提案された解決策に従った後、これはうまくいきました!
JUnitテストクラスを実行しようとしたときに、同じClassNotFoundExceptionに直面しました。しかし、次の手順を試してみると、正常に実行が開始されました。
回避策として、(Eclipseまたはコマンドラインから)mvn test-compile
を実行してから、Eclipse内でJUnitテストを実行してみてください。