web-dev-qa-db-ja.com

Eclipse内でJUnitユニットテストを実行するときのClassNotFoundException(Mavenを使用)

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プラグインにこのオプション「モジュールを含める」が見つかりません。この問題を修正して単体テストを再度有効にするにはどうすればよいですか?

17
newguy

OK、私はこの質問に自分で答えなければならないようです。

この問題の主な理由は、依然としてm2EclipseEclipseプラグインです。このプラグインの新しいバージョンは、1つのプロジェクトでネストされたモジュールをサポートしていません。本当に複数のモジュールを表示する必要がある場合は、パッケージエクスプローラーから古いモジュールを削除し、ワーキングセットを作成して、[既存のMavenプロジェクトをインポートする]オプションを使用してプロジェクトを再度インポートする必要があります。 Eclipseインポートウィザードがウィンドウをポップアップし、インポートするモジュールを尋ねます。次に、すべてのモジュールを選択して、インポートを完了できます。その結果、ワーキングセットにはプロジェクトのすべてのモジュールが含まれ、各モジュールは個別のプロジェクトとして扱われますが、ワークスペースではモジュールは1つのプロジェクトにあります。これを行うことで、クラスを検索できない、単体テストを実行してJava.lang.ClassNotFoundExceptionを取得できないなど、クラスパスに関連してEclipseで発生したすべての問題が解決されます。

参考までに、ワーキングセットの作成方法を説明する記事を次に示します。 ワーキングセット

新しいワーキングセットを作成せずにプロジェクトをインポートできると思いますが、ワーキングセットはプロジェクトに属するすべてのモジュールを1つのセットに保持するため、整理が容易です。

2か月前に答えがあったらいいのに、解決策を探すのにあまり時間をかけなかったでしょう。

5
newguy

現在のm2eプラグインにはまだいくつかのバックドローがあります。ユニットテストケースは、ワーキングセットにグループ化されたプロジェクトを含むため実行できませんでした。以下が役立つ場合があります。

  1. Junit-testsを含むプロジェクトを右クリックします。
  2. 選択Maven->ワークスペース解決を無効にする

その後、テストを再実行してみてください。

19
Tim Long

私は解決策を見つけたと思います、少なくともこれは私にとってはうまくいきました:プロジェクトを右クリックして「Maven」->「UpdateDependencies」を選択します

次に、試したところ、ClassNotFoundExceptionが発生しませんでした。

4
Kumar Manish

ここや他の投稿で言及されているすべてを試しました。人々が提供した解決策のいくつかは次のとおりです。

  1. テストクラスの出力フォルダーを変更します。
  2. Mavenからテストコンパイルを実行するプロジェクトのカスタムビルダーを作成します。
  3. Mavenの依存関係を、プロジェクトビルドパスの[注文とエクスポート]リストの上位に移動します。

たくさんありましたが、私が見つけたのは次のとおりです。

  1. 開発環境を閉じます。
  2. プロジェクトで使用されているjarファイルをローカルのMavenリポジトリから削除します。
  3. IDEを開きます。
  4. プロジェクトをビルドします。
  5. テストを実行します。

何時間もキーボードに頭をぶつけて、提案された解決策に従った後、これはうまくいきました!

2
gffny

JUnitテストクラスを実行しようとしたときに、同じClassNotFoundExceptionに直面しました。しかし、次の手順を試してみると、正常に実行が開始されました。

  1. プロジェクトを選択します。
  2. EclipseIDEのツールバーに表示されているプロジェクトオプションをクリックします。
  3. 「クリーン」を選択します。
  4. 次に、テストファイルを実行してみます。
2
user5259110

回避策として、(Eclipseまたはコマンドラインから)mvn test-compileを実行してから、Eclipse内でJUnitテストを実行してみてください。

0
artbristol