wake-up-neo.com

ClassNotFoundException beim Ausführen von JUnit-Komponententests in Eclipse (mit Maven)

Ich habe gerade meine SpringSource Tools Suite (STS, eine Variante IDE von Eclipse) auf die neueste Version (v3.6.1) aktualisiert. Dann können alle meine JUnit-Komponententests nicht erneut ausgeführt werden. Ich erhalte diesen Fehler:

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)

Laut diesem Blog: ClassNotFoundException beim Ausführen von JUnit-Komponententests in Eclipse (mit Maven) , Liegt es an einer falschen Konfiguration des Maven-Plugins in Eclipse. In STS 3.6.2 kann ich diese Option "Include Modules" jedoch nicht im Maven-Plugin finden. Wie kann ich dieses Problem beheben und meine Komponententests erneut aktivieren?

17
newguy

OK, anscheinend muss ich diese Frage selbst beantworten.

Der Hauptgrund für dieses Problem ist immer noch das m2Eclipse-Eclipse-Plug-In. Die neue Version dieses Plugins unterstützt keine verschachtelten Module in einem Projekt. Wenn Sie wirklich mehrere Module sehen müssen, müssen Sie das alte aus dem Paket-Explorer entfernen, ein Arbeitsset erstellen und das Projekt erneut importieren, indem Sie die Option "Vorhandene Maven-Projekte importieren" verwenden. Der Eclipse-Importassistent öffnet ein Fenster und fragt Sie, welches Modul importiert werden soll. Dann können wir alle Module auswählen und den Import beenden. Als Ergebnis enthält das Arbeitsset alle Module Ihres Projekts und behandelt jedes Modul als separates Projekt, obwohl sich Ihre Module im Arbeitsbereich noch in einem Projekt befinden. Dadurch werden alle Probleme gelöst, die in Eclipse in Bezug auf classpath aufgetreten sind, z. B. dass eine Klasse nicht durchsucht werden kann oder die Komponententests nicht ausgeführt werden können und eine Java.lang.ClassNotFoundException erhalten wird.

Hier finden Sie einen Artikel, in dem Sie lernen, wie Sie einen Arbeitssatz erstellen: Arbeitssatz

Ich denke, Sie können das Projekt importieren, ohne einen neuen Arbeitssatz zu erstellen, aber der Arbeitssatz hält alle Module, die zu Ihrem Projekt gehören, in einem Satz, so dass es einfacher zu organisieren ist.

Ich wünschte, ich hätte die Antwort vor zwei Monaten, also hätte ich nicht viel Zeit mit der Suche nach einer Lösung verbracht.

5
newguy

Es gibt noch einige Rückschläge auf das aktuelle m2e Plugin. Unit-Test-Fälle konnten nicht ausgeführt werden, da ihr Projekt in einem Arbeitssatz gruppiert war. Folgendes kann helfen:

  1. Klicken Sie mit der rechten Maustaste auf das Projekt einschließlich der Junit-Tests.
  2. Wählen Sie Maven -> Workspace-Auflösung deaktivieren

Versuchen Sie dann, den Test erneut auszuführen.

17
Tim Long

Ich glaube, ich habe die Lösung gefunden, zumindest funktionierte dies für mich: Klicken Sie mit der rechten Maustaste auf das Projekt und wählen Sie 'Maven' -> 'Update Dependencies'.

Als ich es dann versuchte, bekam ich keine ClassNotFoundException.

4
Kumar Manish

Ich habe alles versucht, was hier und in anderen Beiträgen erwähnt wird. Einige der Lösungen, die die Leute anboten, waren:

  1. Ändern Sie den Ausgabeordner für die Testklassen.
  2. Erstellen Sie einen benutzerdefinierten Builder für das Projekt, der die Testkompilierung von Maven ausführen würde.
  3. Verschieben Sie die Maven-Abhängigkeiten in der Liste Reihenfolge und Export im Projekterstellungspfad nach oben.

Es gab viele, viele mehr, aber die eine, die ich zum Arbeiten fand, war wie folgt: 

  1. Schließen Sie die Entwicklungsumgebung. 
  2. Löschen Sie die vom Projekt verwendeten Gläser aus meinem lokalen Maven-Repository. 
  3. Öffnen Sie die IDE. 
  4. Bauen Sie das Projekt auf. 
  5. Führen Sie den Test aus.

Nachdem ich stundenlang meinen Kopf gegen meine Tastatur geschlagen und Lösungsvorschläge verfolgt hatte, funktionierte diese!

2
gffny

Auch wir hatten die gleiche ClassNotFoundException, als wir versuchten, die Testklasse JUnit auszuführen. Als wir jedoch die folgenden Schritte ausprobierten, wurde die Ausführung erfolgreich gestartet.

  1. Wählen Sie Ihr Projekt aus.
  2. Klicken Sie auf die Projektoption, die in der Symbolleiste in der Eclipse-IDE angezeigt wird.
  3. Wählen Sie "sauber".
  4. Versuchen Sie jetzt, die Testdatei auszuführen.
2
user5259110

Versuchen Sie zum Umgehen, mvn test-compile (entweder in Eclipse oder über die Befehlszeile) auszuführen, und führen Sie dann den Junit-Test in Eclipse aus.

0
artbristol