Beim Versuch, meinen JUnit-Test von Eclipse aus zu starten, wird eine "ClassNotFoundException" angezeigt. Wenn Sie "mvn test" von der Konsole aus ausführen, funktioniert alles einwandfrei. Außerdem wurden in Eclipse keine Probleme gemeldet.
Meine Projektstruktur ist folgende:
- Elternprojekt (Pom-Verpackung)
- Webprojekt (War-Packaging - mein JUnit-Test ist hier)
- Flex-Projekt
- Konfigurationsprojekt
edit: Wie kann die Klasse nicht gefunden werden? Es ist eine einfache HelloWorld-Anwendung ohne spezielle Bibliotheken.
Hier ist die Run-Konfiguration meiner JUnit: Alternativtext http://www.walkner.biz/_temp/runconfig.png
Testklasse (aber wie gesagt; es funktioniert auch nicht mit einer einfachen HelloWorld ...):
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import biz.prognoserechnung.domain.User;
import biz.prognoserechnung.domain.UserRepository;
import biz.prognoserechnung.domain.hibernate.UserHibernateDao;
public class UserDaoTest {
/**
* the applicationcontext.
*/
private ApplicationContext ctx = null;
/**
* the user itself.
*/
private User record = null;
/**
* Interface for the user.
*/
private UserRepository dao = null;
@Before
public void setUp() throws Exception {
String[] paths = { "WEB-INF/applicationContext.xml" };
ctx = new ClassPathXmlApplicationContext(paths);
dao = (UserHibernateDao) ctx.getBean("userRepository");
}
@After
public void tearDown() throws Exception {
dao = null;
}
@Test
public final void testIsUser() throws Exception {
Assert.assertTrue(dao.isUser("John", "Doe"));
}
@Test
public final void testIsNoUser() throws Exception {
Assert.assertFalse(dao.isUser("not", "existing"));
Assert.assertFalse(dao.isUser(null, null));
Assert.assertFalse(dao.isUser("", ""));
}
}
Antworten:
Ich bin mehrmals auf diese Situation gestoßen und habe nach vielen Versuchen die Lösung gefunden.
Überprüfen Sie Ihren Projekterstellungspfad und aktivieren Sie für jeden Ordner bestimmte Ausgabeordner. Gehen Sie nacheinander durch jeden Quellordner Ihres Projekts und legen Sie den Ausgabeordner fest, den maven verwenden würde.
Zum Beispiel, Ihr Web - Projekt
src/main/java
solltetarget/classes
unter dem Web - Projekt, sollen Testklassen habentarget/test-classes
auch unter dem Web - Projekt und so.Mit dieser Konfiguration können Sie Komponententests in Eclipse ausführen.
Nur noch ein Hinweis: Wenn für die Tests Ihres Webprojekts einige Konfigurationsdateien erforderlich sind, die sich unter den Ressourcen befinden, müssen Sie diesen Ordner als Quellordner einschließen und die richtige Konfiguration für den Erstellungspfad vornehmen.
Ich hoffe es hilft.
quelle
@Ignore
überall und GUI-Verknüpfungen!Carlos Ansatz half! Eclipse - java.lang.ClassNotFoundException
Versuchen Sie, den Klassenpfad der Junit-Run-Konfiguration zu überprüfen:
funktioniert bei mir.
quelle
Ihr Build-Klassenpfad ist korrekt, weshalb Sie kompilieren können. Der Klassenpfad für Ihre JUnit muss überprüft werden. Gehen Sie zum Menü "Ausführen" und wählen Sie "Dialogfeld" Ausführen öffnen ". Dort sollte links ein Baum mit JUnit als Option angezeigt werden. Öffnen Sie diesen Knoten und suchen Sie Ihren Test und wählen Sie ihn aus. Im rechten Bereich sehen Sie eine Registerkarte für den Klassenpfad. Stellen Sie sicher, dass Ihre Klasse, die der Test zu instanziieren versucht, gefunden wird.
bearbeiten:
Dies scheint ein Problem mit Maven zu sein, und sein Verhalten nach einer Veröffentlichung hat die Standard-Eclipse-Ausgabeordner geändert. Ich habe Lösungen gesehen, wo beschrieben
mvn clean test
macht den Trick oderBei den ersten drei gab es Berichte über wiederkehrende Probleme. Das letzte sieht für mich am besten aus, aber wenn es nicht funktioniert, versuchen Sie es bitte mit den anderen.
hier und hier sind einige info
quelle
Möglicherweise fehlt die Klassendatei in Ihrem Build-Ordner. Eine Lösung besteht darin, das Projekt zu bereinigen und neu zu erstellen.
quelle
Aktivieren von [x] Verwenden Sie temporäre JAR, um den Klassenpfad (um Einschränkungen der Klassenpfadlänge zu vermeiden) auf der Registerkarte Klassenpfad der Konfiguration Ausführen anzugeben .
Wenn Ihr Projekt sehr groß ist und Sie viele Abhängigkeiten von anderen Geschwisterprojekten und Maven-Abhängigkeiten haben, stoßen Sie möglicherweise auf die Einschränkungen der Klassenpfadlänge, und dies scheint die einzige Lösung zu sein (abgesehen davon, dass das Verzeichnis für Ihr lokales Maven-Repo kürzer wird (unser beginnt bereits) bei c: / m2)
quelle
Hier gibt es viele verschlungene Vorschläge.
Ich bin bei Maven-Projekten mehrmals auf dieses Problem gestoßen, nachdem ich Ressourcen per Drag & Drop verschoben oder Klassennamen umgestaltet habe.
In diesem Fall kopieren Sie den problematischen Testfall (
.java
) einfach über das Terminal / den Dateibrowser an einen anderen Speicherortright-click -> Delete
in Eclipse und verschieben ihn, wenn Sie die Option haben, auf die Festplatte zu löschen. Verschieben / kopieren Sie die kopierte Datei an den ursprünglichen Dateispeicherort. Wählen Sie dann Ihr Projekt in Eclipse aus und drücken Sie F5, um die Ressourcen zu aktualisieren.Dies ist schnell und einfach und hat das Problem jedes Mal für mich dauerhaft behoben.
quelle
Ich hatte genau das gleiche Problem, aber ich habe es herausgefunden! Gehen Sie zu Ihrer Projektdatei und klicken Sie mit der rechten Maustaste darauf. Klicken Sie dann auf
Refresh
oder drücken Sie F5. Versuchen Sie dann, es auszuführen. Wenn es immer noch nicht funktioniert, vergessen Sie es einfach, da ich genau das gleiche Problem hatte und es nur bedeutet, dass Ihre Version von Eclipse Müll ist.quelle
Dies war meine Lösung für das Problem. Natürlich können viele Dinge dazu führen, dass es auftritt. Für mich war es so, dass Maven2 (nicht das Plugin für Eclipse) das Eclipse-Profil so einrichtete, dass ein anderer Builder (AspektJ) verwendet wurde, aber ich hatte das Plugin nicht in Eclipse./
http://rbtech.blogspot.com/2009/09/eclipse-galileo-javalangclassnotfoundex.html
Prost Ramon Buckland
quelle
Sachins Recht: Selbst bei korrektem Klassenpfad zeigt die Registerkarte Probleme, dass eine Abhängigkeit oder die Ressource / das Projekt einen Fehler aufweist, der behoben werden muss, damit Maven beim Erstellen oder Ändern Ihrer Testklasse automatisch Klassen erstellen und erstellen kann .
"Hallo,
Es ist sehr alt Jul (welches Jahr), aber ich hatte das gleiche Problem.
Das eigentliche Problem ergab, dass Eclipse keine Klassendatei für die Java-Datei generieren konnte. Der Klassenpfad war korrekt.
Sehen Sie auf der Registerkarte Problem nach, ob in Ihrem Projekt etwas / eine Datei fehlt. Sie können ein neues Projekt erstellen und Dateien nacheinander hinzufügen und erstellen, bis das Kompilieren und Erstellen von Klassen beendet ist (überprüfen Sie den Arbeitsbereich / proj / bin / package / Ordner auf Klassen).
Es ist seltsam, aber wahr, Ecplise konnte nicht übereinstimmen, da 4 von 20 Java-Dateien ein einzelnes Bild verwendeten, das fehlte. Als Ergebnis wurde keine der Java-Dateien kompiliert.
CLASSPATH ist hier kein Thema. "
quelle
Wir hatten die genaue Ausnahme (mit SpringSource Tools, Tomcat, unter Win7) und die Ursache war, dass wir einen Dateinamen (eine Datei umbenannt) von SubDomain.java in Subdomain.java (D vs d) umgestaltet hatten und er irgendwie kollidierte, obwohl SpringSource es war zeigt den neuen Namen Subdomain.java. Die Lösung bestand darin, die Datei (über SpringSource) zu löschen und unter dem Namen Subdomain.java erneut zu erstellen und ihren früheren Inhalt zu kopieren. So einfach ist das.
quelle
Ich löse diesen Bulit-Pfad ---> Bibliotheken ---> Bibliothek hinzufügen ---> Junit check junit4
quelle
Klicken Sie auf
project->properties->Java build path->Source
und überprüfen Sie, ob jedersrc
Ordner noch gültig ist oder kürzlich entfernt wurde. Korrigieren Sie fehlende oder falsche Pfade und erstellen Sie den Test neu und führen Sie ihn aus. Es wird das Problem beheben.quelle
Ich habe nur Eigenschaften -> Java-Erstellungspfad -> Bestellen und Exportieren -> Alle nicht aktivierten Kontrollkästchen aktiviert -> Junit ganz nach oben verschoben
quelle
Versucht
arbeitete danach
Maven 2 LifeCycle >> Test
quelle
Ich hatte alle Lösungen auf dieser Seite ausprobiert: Projekt aktualisieren, neu erstellen, alle Projekte bereinigen, Eclipse neu starten, die Projekte erneut importieren (sogar), Maven neu erstellen und aktualisieren. Nichts hat geklappt. Was tat der Arbeit war es, die Klasse zu einem Kopieren neuen Namen , die fein läuft - bizarr , aber wahr.
Nachdem ich mich einige Zeit damit abgefunden hatte, habe ich es einfach behoben durch:
Run
MenüRun Configurations
Run Configuration
durch Drücken von Löschen oder Klicken auf das rote X.Irgendetwas muss mit der zwischengespeicherten Laufkonfiguration vermasselt worden sein.
quelle
Das Löschen des Projekts von Eclipse (nicht von der Festplatte), das in gewisser Weise den Arbeitsbereich bereinigt und das Projekt erneut in Eclipse importiert, hat bei mir wieder funktioniert.
quelle
Normalerweise tritt dieses Problem auf, wenn das Java-Anwendungstool ausgeführt wird
java
, das die Klassendatei nicht finden kann.Meistens sehen wir dieses Problem im Maven-Projekt, weil es ein Problem mit der Eclipse-Maven-Synchronisierung gibt . So lösen Sie dieses Problem: Maven-> Konfiguration aktualisieren
quelle
Haben Sie versucht, mit der rechten Maustaste auf Ihren Projektstamm zu klicken, "Eigenschaften" auszuwählen und sicherzustellen, dass der KLASSENPFAD korrekt ist? Wenn ich mich richtig erinnere, machst du das so.
Gibt es etwas über die Art und Weise, wie Eclipse Komponententests ausführt, bei denen Sie die Junit-JAR auf besondere Weise zur Laufzeit CLASSPATH hinzufügen müssen?
Ich benutze IntelliJ, daher habe ich diese Probleme nicht.
Ich würde Eclipse selbst überprüfen, aber ich bevorzuge es nicht auf meinem Desktop zu haben.
quelle
Hmm, sieht ein bisschen bizarr aus, versuchen Sie es mit der folgenden Anmerkung oben in der Klasse:
und lassen Sie mich wissen, wie Sie damit umgehen.
Überprüfen Sie, ob Sie Build automatisch aktiviert haben. Wenn Sie sicherstellen möchten, dass Ihre Testklassen korrekt kompiliert werden, löschen Sie den Maven-Zielordner (und alle von Eclipse möglicherweise verwendeten bin-Ordner). Verwenden Sie auch m2eclipse, da ich es als etwas problematisch empfinde?
quelle
Die Lösung für mein Problem war ähnlich: Die Bibliotheken waren ungültig. Wenn Sie in die .classpath-Datei des Projekts schauen, sehen Sie classpathentry-Tags mit dem Schlüssel / Wert kind = "lib". Einige von mir waren falsch.
Ich habe dies erst entdeckt, als ich die Validierungseinstellungen deaktiviert habe. Das heißt, es gab so viele Fehler in den JSP-Dateien usw., dass die Klassenpfadfehler nicht offensichtlich waren (oder möglicherweise sogar auftauchten). Infolgedessen wurde nichts in die Zielausgabeordner kompiliert, aber keine hilfreichen Fehler, warum.
quelle
Bitte zeigen Sie auf JDK unter Windows> Einstellungen> Java> Installierte JRE.
Zeigen Sie nicht auf jre, sondern auf ein geeignetes JDK. Ich habe auf JDK 1.6U29 gezeigt und das Projekt aktualisiert.
Danach ist das Problem behoben und die Einheitentests funktionieren einwandfrei.
Danke,
-Tapas
quelle
Ich bin kürzlich in Eclipse auf denselben Fehler gestoßen, dh die Eclipse-IDE konnte die Unit-Testklasse nicht finden, unabhängig davon, wie ich die Konfigurationen ändere. Aus den vorherigen Beiträgen hier und auf anderen Websites habe ich den Klassenpfad und die Quellinformationen doppelt und dreifach überprüft und den Quellordner und die Bibliotheken sowohl im "Konfiguration ausführen" als auch im "Java-Erstellungspfad" nach oben und unten verschoben "config windows, und ich habe auch das Projekt bereinigt und neu erstellt, aber keiner der Tricks funktioniert für mich. Das spezifische Java-Projekt ist ein altes ANT-kompiliertes Projekt und enthält viele Gläser in der Eclipse-Bibliothek.
Dann habe ich die Unit-Test-Klasse geändert, um eine main () -Methode hinzuzufügen, und mit der rechten Maustaste darauf geklickt, um eine Java-Anwendung anstelle des JUnit-Tests als "Ausführen" auszuführen. Plötzlich scheint Eclipse aufzuwachen und die Klasse korrekt zu identifizieren. Danach habe ich es wieder auf eine Unit-Test-Anwendung umgestellt und es funktioniert immer noch.
Dies scheint ein Fehler in Eclipse zu sein. Ich vermute, dass die große Anzahl von Bibliotheken (> 260) die Fähigkeit der JVM, meine JUnit-Klasse zu finden, verwirrt.
quelle
Ich war auch von diesem Problem betroffen und konnte eine ausreichende Lösung für meinen Fall finden. Wenn Ihr Eclipse-Projekt eine .classpath-Datei in Ihrem Projektstamm enthält (siehe Navigatoransicht anstelle der Paket-Explorer-Ansicht), stellen Sie sicher, dass Ihr Maven-Klassenpfad vor Ihrem JRE-Container-Klassenpfad angezeigt wird.
Wenn Ihr Projekt keine .classpath-Datei hat, können Sie den Java-Erstellungspfad Ihres Projekts bearbeiten, um die Reihenfolge und den Export zu ändern. Wenn Ihr Projekt über die .classpath-Datei verfügt und Sie Ihre Reihenfolge nur im Java Build Path ändern, werden Sie feststellen, dass die Reihenfolge nicht beeinflusst wird und das Problem weiterhin auftritt.
Und ein Projekt-> Reinigen schadet nie, nachdem Sie die Änderung vorgenommen haben.
quelle
Stellen Sie sicher, dass Ihre Teststartkonfiguration NICHT die folgenden Zeilen enthält, ODER versuchen Sie, das automatisierte Maven-Abhängigkeitsmanagement zu aktivieren.
quelle
Ich habe versucht , alles , was ich in dieser langen Beitrag gelesen und unglaublich, was für mich gearbeitet wurde, anstatt sich auf die Testklasse klicken und auswählen
Run as JUnit test
, klicken Sie auf das Testverfahren und läuft wieJUnit test
. Ich habe keine Idee warum?quelle
Der JUnit-Test innerhalb von Eclipse gab mir auch NoClassDefFoundError. Das Ausführen von 'mvn clean test' über die Befehlszeile führte bei mehreren Jars zu folgendem Fehler: Ungültiger LOC-Header (falsche Signatur) Das Löschen dieser Jars aus dem lokalen m2-Repository und das erneute Ausführen von 'mvn clean test' lösten mein Problem.
quelle
Ich hatte das gleiche Problem. Alles was ich getan habe war,
ich). Generierte Eclipse-Artefakte
mvn clean eclipse:eclipse
ii). Aktualisieren Sie das Projekt und führen Sie Ihren Junit-Test erneut aus. Sollte gut funktionieren.
quelle
Überprüfen Sie außerdem das Dialogfeld "Web Deployment Assembly" der Eclipse.
Dies finden Sie unter: Projekteigenschaften-> Bereitstellungsassembly.
Kürzlich hatte ich ein Eclipse-Plugin, das eines meiner Webprojekte modifizierte, und es fügte ~ mysteriös ~ die Maven-Testverzeichnisse / src / test / java, / src / test / resources zur Deployment Assembly hinzu. UGGGG !!!
Aus diesem Grund hat mein Projekt gut funktioniert, als ich nur Maven für Tomcat erstellt und bereitgestellt habe, keine ClassNotFoundExceptions ... Als ich jedoch die Bereitstellung über Eclipse durchgeführt habe, Whammo !! Ich erhalte ClassNotFoundExceptions, weil der TestCode bereitgestellt wird.
Eric
quelle
Das bedeutet, dass Ihre pom.xml ungelöste Probleme hat. Öffnen Sie die Problemansicht entsprechend lösen. Dann können Sie die Testfälle erfolgreich ausführen, ohne auf die classnotfoundexception zu stoßen.
quelle
Das Ändern der Reihenfolge der Klassenpfadartefakte im Java-Erstellungspfad hat das Problem für mich behoben.
Dies sollte das Problem beheben.
quelle