wake-up-neo.net

Eclipse - Java.lang.ClassNotFoundException

Wenn ich versuche, meinen JUnit-Test aus Eclipse heraus zu starten, erhalte ich eine "ClassNotFoundException". Wenn Sie "mvn test" von der Konsole aus ausführen, funktioniert alles einwandfrei. Es gibt auch keine Probleme in Eclipse.

Meine Projektstruktur ist folgende:

  • übergeordnetes Projekt (pom-packaging)
    • Webprojekt (Kriegspackung - 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 meines JUnits: alt text 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("", ""));
    }
}
90
swalkner

Ich bin mehrmals auf diese Situation gestoßen und nach vielen Versuchen habe ich die Lösung gefunden.

Überprüfen Sie Ihren Projekterstellungspfad und aktivieren Sie bestimmte Ausgabeordner für jeden Ordner. Gehen Sie nacheinander durch jeden Quellordner Ihres Projekts und legen Sie den Ausgabeordner fest, den Maven verwenden würde. 

Beispielsweise sollte src/main/Java Ihres Webprojekts target/classes unter dem Webprojekt und Testklassen target/test-classes auch unter dem Webprojekt und so enthalten sein.

Mit dieser Konfiguration können Sie Komponententests in Eclipse ausführen.

Noch ein Hinweis: Wenn für die Tests Ihres Webprojekts Konfigurationsdateien erforderlich sind, die sich unter den Ressourcen befinden, stellen Sie sicher, dass Sie diesen Ordner als Quellordner angeben und die richtige Build-Pfad-Konfiguration vornehmen.

Ich hoffe es hilft.

192
Carlos

Carlos Ansatz half! Eclipse - Java.lang.ClassNotFoundException

Versuchen Sie, den Klassenpfad der Junit-Run-Konfiguration zu überprüfen:

  1. Öffnen Sie Ihre Laufkonfigurationen
  2. Klicken Sie auf den jUnit-Test, den Sie starten möchten
  3. gehen Sie zur Registerkarte Classpath
  4. Versuchen Sie, einen Ordner hinzuzufügen (klicken Sie auf Benutzereinträge, klicken Sie auf Erweitert, klicken Sie auf Ordner hinzufügen, klicken Sie auf OK und suchen Sie im Ausgabeordner nach Ihren Testklassen (die Sie unter Java-Buildpfad für Projekteigenschaften finden).

funktioniert bei mir.

46
CoffeJunky

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 "Laufdialog öffnen". Dort sollten Sie links einen Baum mit JUnit als Option sehen. Öffnen Sie diesen Knoten und suchen Sie Ihren Test aus und wählen Sie ihn aus. Im rechten Fensterbereich sehen Sie eine Registerkarte für Klassenpfad. Achten Sie darauf, dass Ihre Klasse, die der Test zu instanziieren versucht, gefunden wird.

edit:

dies scheint ein Problem mit Maven zu sein und sein Verhalten nach einem Release hat die Standard-Eclipse-Ausgabeordner geändert. Ich habe gesehen, wo Lösungen beschrieben wurden 

  • platzieren von Maven in den Bootclasspath ÜBER den JRE-Funktionen, oder 
  • laufen mvn clean test macht den Trick oder 
  • wenn Sie alle Ihre Eclipse-Projekte aktualisieren und einen Neuaufbau verursachen, wird das Problem behoben
  • Gehen Sie zu Ihrem Projekt und wählen Sie Maven-> Update Configuration, um das Problem zu lösen.

bei 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 gibt ein paar Infos

17
akf

Möglicherweise fehlt die Klassendatei in Ihrem Build-Ordner. Eine Lösung ist das Projekt bereinigen und neu erstellen. 

4
EvilFish

Dies war meine Lösung für das Problem. Natürlich können viele Dinge dazu führen. Für mich war es so, dass Maven2 (nicht das Plugin für Eclipse) das Eclipse-Profil aufbaute, um einen anderen Builder (AspektJ) zu verwenden, aber ich hatte das Plugin nicht in Eclipse.

http://rbtech.blogspot.com/2009/09/Eclipse-galileo-javalangclassnotfoundex.html

Prost Ramon Buckland

3
Ramon

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. Dann versuchen Sie es und führen Sie es aus. Wenn es immer noch nicht funktioniert, vergessen Sie es einfach, da ich das gleiche Problem hatte und es bedeutet nur, dass Ihre Version von Eclipse Müll ist.

3
Starfox275

Hier gibt es viele verworrene Vorschläge.

Dieses Problem ist bei Maven-Projekten mehrmals aufgetreten, nachdem Ressourcen durch Ziehen und Ablegen verschoben oder Klassennamen umgestaltet wurden.

Wenn dies der Fall ist, kopieren Sie das Problem Testfall (.Java) einfach über den Terminal-/Dateibrowser an einen anderen Ort, right-click -> Delete in Eclipse (und verschieben Sie es nicht), und löschen Sie den Datenträger, wenn Sie die Option haben. Verschieben/Kopieren Sie die kopierte Datei in die Originaldatei Wählen Sie Ihr Projekt in Eclipse aus und drücken Sie F5, um die Ressourcen zu aktualisieren.

Dies ist schnell und einfach zu bewerkstelligen und hat das Problem jedes Mal dauerhaft für mich behoben.

3
KomodoDave

Sachins Recht: Auch bei einem korrekten Klassenpfad zeigt die Registerkarte "Probleme", dass einige Abhängigkeiten oder die Ressource/das Projekt einen Fehler aufweist, der behoben werden muss, damit maven beim Erstellen oder Ändern von Klassen automatisch Klassen erstellt und erstellt Ihre Testklasse.

"Hallo,

Es ist sehr alt Jul (in welchem ​​Jahr), aber ich hatte das gleiche Problem.

Tatsächlich wurde festgestellt, dass Eclipse keine Klassendatei für die Java-Datei generieren konnte. Klassenpfad war korrekt.

Sehen Sie sich die Problemregisterkarte an und prüfen Sie, ob Ihrem Projekt etwas/Datei fehlt. Sie können ein neues Projekt erstellen und Dateien nacheinander hinzufügen und erstellen, bis das Kompilieren und Erstellen von Klassen gestoppt ist.

ecplise konnte jedoch nicht richtig funktionieren, da 4 von 20 Java-Dateien ein einziges Image verwendeten, das fehlte. und als Ergebnis wurde keine der Java-Dateien kompiliert.

CLASSPATH ist hier kein Thema. "

2
kisna

Ich löse diesen Bulit-Pfad ---> Bibliotheken ---> Bibliothek hinzufügen ---> Junit Check Junit4

2
wanfke

Wir hatten die genaue Ausnahme (mit SpringSource Tools, Tomcat unter Win7), und der Grund war, dass wir einen Dateinamen (eine umbenannte Datei) von SubDomain.Java in Subdomain.Java (D vs d) umbenannt hatten und irgendwie kollidierte, obwohl SpringSource auftrat 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 den vorherigen Inhalt durch Kopieren und Einfügen zu kopieren. So einfach ist das.

2
Romie

Alles, was ich getan habe, war Eigenschaften -> Java-Erstellungspfad -> Reihenfolge und Export -> Alle nicht aktivierten Kästchen aktiviert -> Junit ganz nach oben verschoben

1
Siddharth

Das Projekt aus Eclipse (nicht von der Festplatte) zu löschen, was den Arbeitsbereich säubert und das Projekt erneut in Eclipse importiert, hat für mich funktioniert.

1

Ich hatte alle Lösungen auf dieser Seite ausprobiert: Projekt aktualisieren, neu erstellen, alle Projekte bereinigen, Eclipse erneut starten, Projekte neu importieren (sogar), Maven neu erstellen und aktualisieren. Nichts hat geklappt. Was did work war, die Klasse in einen neuen Namen zu kopieren der gut läuft - bizarr aber wahr.

Nachdem ich mir dies einige Zeit überlassen hatte, habe ich es einfach behoben durch:

  1. Über das Menü Run
  2. Run Configurations auswählen
  3. Wählen Sie die Laufkonfiguration, die Ihrem Gerätetest zugeordnet ist.
  4. Entfernen Sie den Eintrag aus dem Run Configuration, indem Sie auf Löschen klicken oder auf das rote X klicken.

Es muss etwas mit der zwischengespeicherten Laufkonfiguration vermasselt worden sein.

1
Gray

Versucht  

Link : [here][1]

Open your run configurations
Click on the jUnit-Test you want to start
go to the classpath tab
Try to add a folder (click on user entries, click on advanced, click on add folders,click on ok and search the outputfolder for your test classes(those you find under projektproperties Java build path, source))

arbeitete nach  

Maven 2 LifeCycle >> Test 

1
user2246725

Hmm, sieht ein bisschen bizarr aus, versuchen Sie es mit der folgenden Anmerkung an der Spitze der Klasse:

@RunWith(SpringJUnit4ClassRunner.class)
public class UserDaoTest {
}

und lass mich wissen, wie es dir geht. 

Vergewissern Sie sich, dass der Build automatisch aktiviert ist. Wenn Sie sicherstellen möchten, dass Ihre Testklassen korrekt kompiliert werden, löschen Sie den Maven-Zielordner (und jeden Bin-Ordner, den Eclipse möglicherweise verwendet). Verwenden Sie auch m2Eclipse, da ich das etwas problematisch finde.

1
Jon

Ich wurde auch von diesem Problem betroffen und konnte eine ausreichende Lösung für meinen Fall finden. Wenn sich in Ihrem Eclipse-Projekt eine .classpath-Datei im Projektstammverzeichnis befindet (siehe Navigator-Ansicht anstelle der Package Explorer-Ansicht), stellen Sie sicher, dass Ihr Maven-Klassenpfadeintrag vor dem JRE-Container-Klassenpfadeintrag angezeigt wird.

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="con" path="org.maven.ide.Eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
    <classpathentry kind="con" path="org.Eclipse.jdt.launching.JRE_CONTAINER"/>
</classpath>

Wenn Ihr Projekt über keine .classpath-Datei verfügt, 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 nur Ihre Reihenfolge im Java-Erstellungspfad ändern, werden Sie feststellen, dass die Reihenfolge nicht betroffen ist und das Problem weiterhin auftritt.

Und ein Projekt reinigt nie etwas, nachdem Sie die Änderung vorgenommen haben.

1
cmh

Normalerweise tritt dieses Problem auf, wenn das Java-Anwendungsprogramm Java ausgeführt wird, das die Klassendatei nicht finden kann. 

Meistens in maven project sehen wir dieses Problem, weil Eclipse-Maven sync issue. So lösen Sie dieses Problem: Maven-> Update Configuration  

1
Premraj

klicken Sie auf project->properties->Java build path->Source und prüfen Sie, ob die src-Ordner noch gültig sind oder vor kurzem entfernt wurden. Korrigieren Sie einen fehlenden Pfad oder einen falschen Pfad und erstellen Sie den Test erneut. Es wird das Problem beheben.

1
iunknown

Die Lösung für mein Problem war ähnlich: Die Bibliotheken waren ungültig. Wenn Sie in der .classpath-Datei des Projekts nachschauen, sehen Sie classpathentry-Tags mit dem Schlüssel/Wert kind = "lib". Einige von mir waren falsch.

Ich habe dies nicht entdeckt, bis 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, jedoch keine hilfreichen Fehlermeldungen.

1
Mike

die meisten von uns werden diese Ausnahme erhalten. Wenn Sie diesen Fehler erhalten haben, haben Sie .class-Dateien im richtigen Ordner abgelegt. 

In Webanwendungen sollten sich alle .class-Dateien im Ordner WEB-INF\Classes befinden. Wenn Sie eine Web-App in Eclipse ausführen, führen Sie die folgenden Schritte aus

Schritt 1: Klicken Sie mit der rechten Maustaste auf Projektordner und wählen Sie Eigenschaften .__ Schritt 2: Klicken Sie auf "Java Build Path", um verschiedene Registerkarten wie "Quelle", "Projekte", "Bibliotheken" usw. anzuzeigen. Schritt 3: Wählen Sie Quelle Mappe. Darunter sehen Sie Ihre Projektdetails Schritt 4: Im Ordner "Source" wird die Option Default Output Folder angezeigt. Hier müssen Sie den Klassenordner unter WEB-INF . angeben. Geben Sie einfach den Pfad wie Projektname/WebContent/WEB-INF/classes die Struktur hängt von Ihrer Anwendung ab .__ "Klassen" -Ordner erstellen. Eclipse erstellt es für Sie. Schritt 5: Klicken Sie auf "OK" und führen Sie die Projektbereinigung durch. Das ist es, Ihre App wird jetzt ausgeführt.

0
Sahitya M

Ich hatte das gleiche Problem. Alles was ich tat, war 

ich). Eclipse-Artefakte generiert 

mvn clean Eclipse:eclipse

ii). Aktualisieren Sie das Projekt und führen Sie den Junit-Test erneut aus. Sollte gut funktionieren. 

0
Vikram

DOUBLE-CHECK das Eclipse-Dialogfeld "Web Deployment Assembly". 

Dies kann gefunden werden: Projekteigenschaften-> Bereitstellungsassembly. 

Vor kurzem 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 der Deployment Assembly hinzu. UGGGG !!! 

Aus diesem Grund funktionierte mein Projekt gut, als ich gerade einen direkten Weg zu Tomcat aufbaute und implementierte, keine ClassNotFoundExceptions ... Als ich jedoch die Bereitstellung über Eclipse durchführte, Whammo !! Ich bekomme ClassNotFoundExceptions, da der Testcode bereitgestellt wird. 

Eric

0
Eric Manley

Ich habe Eclipse - Java.lang.ClassNotFoundException beim Ausführen von Junit-Tests gesehen. Ich hatte eine der externen JAR-Dateien gelöscht, die dem Projekt hinzugefügt wurde. Nach dem Entfernen des Verweises dieser JAR-Datei auf das Projekt von Eclipse. Ich könnte die Junit-Tests durchführen.

0
user7639086

Ich verwende gradle mit Eclipse und habe mich heute derselben Herausforderung gestellt. Ich habe verschiedene Lösungsansätze ausprobiert, aber der einzige Weg, der mir geholfen hat, war, den Befehl gradlew clean auszuführen.

P.S. => Kombiniere den "build" nicht mit dem oben genannten Befehl.

Hat mir geholfen, versuch dein Glück.

0

Ich bin kürzlich in Eclipse auf einen Fehler gestoßen, d. H. Der Eclipse IDE konnte die Unit-Testklasse nicht finden, egal wie ich die Konfigurationen ändere. Wie ich aus den vorherigen Beiträgen hier und auf anderen Websites erfahren habe, habe ich den Klassenpfad und die Quellinformationen doppelt und dreifach geprüft und den Quellordner und die Quellbibliotheken sowohl in "Run Configuration" als auch in "Java Build Path" nach oben und unten verschoben "config - Fenster, und ich habe das Projekt auch gereinigt und neu erstellt, aber keiner der Tricks funktioniert für mich. Das spezifische Java-Projekt ist ein altes, von ANT kompiliertes Projekt und enthält viele Gläser in der Eclipse-Bibliothek.

Dann habe ich die Komponententestklasse geändert, um eine main () - Methode hinzuzufügen und mit der rechten Maustaste auf "Ausführen als" einer Java-Anwendung anstelle des JUnit-Tests zu klicken. Plötzlich scheint Eclipse aufzuwachen und die Klasse richtig zu identifizieren. Danach habe ich wieder auf eine Unit-Testanwendung umgestellt, und es funktioniert immer noch.

Dies scheint ein Fehler in Eclipse zu sein. Ich vermute, die große Anzahl von Bibliotheken (> 260) kann die Fähigkeit der JVM, meine JUnit-Klasse zu finden, verwechseln. 

0
Hongyu Zhang

Führen Sie das Projekt als Maven-Test und anschließend als JUnit-Test aus.

0
Yao Li

Bitte verweisen Sie auf die Korrektur des JDK unter Windows> Voreinstellungen> Java> Installierte JRE.

Zeigen Sie nicht auf jre, sondern auf ein ordnungsgemäßes JDK. Ich habe auf JDK 1.6U29 hingewiesen und das Projekt aktualisiert.

Danach ist das Problem weg und jUnit-Tests funktionieren einwandfrei.

Vielen Dank,
- Tapas

0
Tapas Adhikary

Das Ändern der Reihenfolge der Klassenpfad-Artefakte im Java-Erstellungspfad hat es für mich gelöst.

  1. Klicken Sie mit der rechten Maustaste auf das Projekt und wechseln Sie zum Pfad zum Projektaufbau.
  2. Wechseln Sie zur Registerkarte Bestellen und Exportieren, und verschieben Sie die JRE-Systembibliothek nach den Quellen.

Dies sollte es beheben.

0
Sai Killi

Das bedeutet, dass Ihre pom.xml noch offene Probleme hat. Öffne die Problemansicht entsprechend lösen. Dann können Sie die Testfälle erfolgreich ausführen, ohne auf die Klassenausnahme zu stoßen.

0
Raju Rao

JUnit 4.4 wird von der JMockit/JUnit-Integration nicht unterstützt. Dies wird nur von Versionen 4.5 oder neuer unterstützt. 

0
Mahendra Rathod

Gehen Sie zum Build-Pfad -> Quelle und aktivieren Sie die Option "Optionale Probleme beim Kompilieren ignorieren" für alle Quellordner.

0
pavelb

Stellen Sie sicher, dass Ihre Teststart-Konfiguration NICHT die folgenden Zeilen enthält: OR Versuchen Sie, die automatische Verwaltung der Maven-Abhängigkeiten zu aktivieren.

<stringAttribute key="org.Eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.maven.ide.Eclipse.launchconfig.classpathProvider"/>
<stringAttribute key="org.Eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.maven.ide.Eclipse.launchconfig.sourcepathProvider"/>
0
thSoft

Haben Sie versucht, mit der rechten Maustaste auf Ihre Projektwurzel zu klicken, "Eigenschaften" auszuwählen und sicherzustellen, dass der CLASSPATH korrekt ist? Wenn ich mich recht erinnere, machst du es so.

Über die Art und Weise, wie Eclipse Unit-Tests ausführt, müssen Sie die Junit-JAR auf besondere Weise zur Laufzeit CLASSPATH hinzufügen.

Ich benutze IntelliJ, also habe ich diese Probleme nicht. 

Ich würde Eclipse selbst überprüfen, aber ich ziehe es vor, es nicht auf meinem Desktop zu haben.

0
duffymo

Ich habe alles versucht, was ich in diesem langen Beitrag gelesen habe. Unglaublich, was für mich funktioniert hat, statt auf die Testklasse zu klicken und Run as JUnit test auszuwählen, auf test method zu klicken und als JUnit test auszuführen. Ich habe keine Idee warum?

0
snakedog

Ich stand vor demselben Problem, für mich ist das Problem anders. Es kam, weil einige der Abhängigkeiten von Maven nicht heruntergeladen wurden. 

a. I went through properties -> Java Buildpath -> Maven Dependencies and identified the missed libraries. 
b. Removed the missed libraries artifacts from pom.xml
c. Downloaded the libraries and added them explicitly.
0
Hari Krishna

Der JUnit-Test von Eclipse gab mir auch NoClassDefFoundError . Beim Ausführen von 'mvn clean test' von der Befehlszeile aus gab es folgenden Fehler in mehreren Jars: und erneutes Ausführen von 'mvn clean test' löste mein Problem.

0
RutgerDOW