Java NoClassDefFoundError-Fehler beheben

Rashmi Patidar 12 Oktober 2023
Java NoClassDefFoundError-Fehler beheben

In der Sprache Java sind Fehler Anomalien, die hauptsächlich aufgrund fehlender Ressourcen auftreten. Darüber hinaus können Fehler zur Kompilierzeit nicht abgefangen werden und treten zur Laufzeit auf.

Die Fehler werden auch als ungeprüfte Ausnahmen bezeichnet. Es kann nicht überprüft werden, ob ein Fehler auftreten kann oder nicht einmal die Kompilierung erfolgreich durchgeführt wird.

Die verschiedenen Fehler, die unter der Klasse Error vorhanden sind, sind AssertionError, NoClassDefFoundError, OutOfMemoryError usw.

Der NoClassDefFoundError ist ein Untertyp der Klasse Error, der sagt oder bezeichnet das Java Runtime Environment oder (JRE) die Klassendefinition, die zum Zeitpunkt der Kompilierung vorhanden war, aber zur Laufzeit nicht verfügbar ist, nicht laden kann. Die Klasse Error befindet sich im Paket javas.lang.

Die Klasse NoClassDefFoundError befindet sich unter LinkageError. Der Fehler ist eine Art von Verknüpfungsproblem, das auftritt oder auftritt, wenn wir nicht die richtige IDE (Integrated Development Environment) wie IntelliJ IDEA, Eclipse usw. verwenden und die Konsole zum Ausführen des Programms verwenden.

Die IDE arbeitet so, dass die Klassen, die von der Hauptklasse abhängig sind, vorher kompiliert werden. In einer Konsole oder einem Terminal liegt es jedoch in der Verantwortung des Benutzers, alle abhängigen Klassen zu kompilieren und dann die Hauptklasse auszuführen, wodurch das Risiko eines Verknüpfungstypfehlers verringert wird.

Lassen Sie uns den Fehler anhand eines Java-Codeblocks verstehen.

public class NoClassDefinitionError {
  public static void main(String[] args) {
    A a = new A();
    a.show();
  }
}

class A {
  void show() {
    System.out.println("In class A");
  }
}

Erstellen Sie im obigen Codeblock eine Java-Klassendatei mit dem Namen NoClassDefinitionError. Speichern Sie die Datei mit der Erweiterung .java.

Öffnen Sie dann die Klasse im Editor, kopieren Sie den Codeblock und fügen Sie ihn in die Klassendatei ein. Öffnen Sie eine Eingabeaufforderung und wechseln Sie zu dem Speicherort der Datei.

Führen Sie den ersten Befehl aus, um den Codeblock-Befehl javac NoClassDefinitionError zu kompilieren.

Der Befehl erfordert, dass die Umgebungsvariable PATH standardmäßig gesetzt ist, bevor der Befehl javac verwendet wird. Stellen Sie sicher, dass die PATH-Variable den bin-Speicherort von Java bereits zuvor hinzugefügt hat.

Andernfalls wird ein Fehler ausgegeben, da javac nicht als interner oder externer Befehl, lauffähiges Programm oder Batch-Datei erkannt wird.

Mit dem javac-Befehl kann der Compiler eine .class-Datei erstellen, die nichts anderes als die Bytecode-Version der Java-Datei ist. Diese Datei ist für Java Virtual Machine oder JVM leicht verständlich, um das Programm auszuführen.

Rufen Sie nun den Ort auf, an dem die Datei .java gespeichert wird. Es scheint einfach, die Datei .class zu finden, die nach dem Ausführen des javac-Befehls erstellt wird. Entfernen Sie die Datei A.class manuell vom Speicherort.

Versuchen Sie, den Befehl java NoClassDefinitionError auszuführen.

Der Befehl java führt intern die Java-Anwendung aus, indem er alle abhängigen Klassendateien lädt und nach der Hauptmethode sucht. Wenn die Klassendefinition nicht gefunden werden kann, wird eine Laufzeitausnahme angezeigt.

Unten ist ein kleiner Code des Fehlerblocks, der ausgefüllt wird, wenn dieser Fehler auftritt.

Exception in thread "main" java.lang.NoClassDefFoundError
    : A at NoClassDefinitionError.(NoClassDefinitionError.java : 3)

Nachfolgend sind verschiedene Lösungen zur Behebung des Problems aufgeführt, wenn ein Fehler auftritt.

  • Prüfen Sie, ob sich der Klassenname, der ausgeführt werden soll, an der genauen und gewünschten Position befindet.
  • Prüfen Sie, ob .class-Dateien für die Java-Klasse vorhanden sind, die ausgeführt werden soll. Wenn die Klassendatei nicht vorhanden ist, kompilieren Sie zuerst die andere Klasse und lassen Sie die Klassendatei generieren.
  • Überprüfen Sie auf transitive Abhängigkeiten und kompilieren Sie die Klassen, die zum Ausführen der Hauptklassendatei benötigt werden. A->B und B-> C In diesem Fall ist A transitiv abhängig von der C-Klasse. Die transitive Abhängigkeit bezeichnet eine indirekte Beziehung, die zwischen drei verschiedenen Dateien besteht, die funktional voneinander abhängig sind.
  • Die direkte Verwendung der IDE-Umgebung verringert die Wahrscheinlichkeit, noClassDefFoundError-Probleme zu vermeiden, da die Auflösung von Abhängigkeiten und transitive Abhängigkeiten vor dem eigentlichen Lauf behandelt werden.
  • Untersuchen Sie den Stack-Trace richtig, da er ein genaues Verständnis dafür gibt, wo das Problem beginnt, sich zu füllen und seine Auswirkungen auf den Codefluss von allen Orten aus, an denen es ausgelöst wird. Der Stack-Trace sollte dabei helfen, das Problem zu beheben.
  • Fügen Sie den Ort, an dem der Java-Befehl ausgeführt wird, in die Variable CLASSPATH ein. Die Variable hilft bei der Suche nach dem Pfad, in dem die Klassendateien ausgewählt und geladen werden sollen, wenn das Programm in der Java Runtime Environment ausgeführt wird.
Rashmi Patidar avatar Rashmi Patidar avatar

Rashmi is a professional Software Developer with hands on over varied tech stack. She has been working on Java, Springboot, Microservices, Typescript, MySQL, Graphql and more. She loves to spread knowledge via her writings. She is keen taking up new things and adopt in her career.

LinkedIn

Verwandter Artikel - Java Error