Correction de l'erreur NoClassDefFoundError en Java

Rashmi Patidar 12 octobre 2023
Correction de l'erreur NoClassDefFoundError en Java

Dans le langage Java, les erreurs sont des anomalies qui surviennent principalement en raison d’un manque de ressources. En outre, les erreurs ne peuvent pas être interceptées au moment de la compilation et se produisent au moment de l’exécution.

Les erreurs sont également appelées exceptions non vérifiées. On ne peut pas vérifier si une erreur peut se produire ou même si la compilation ne se fait pas avec succès.

Les diverses erreurs présentes sous la classe Error sont AssertionError, NoClassDefFoundError, OutOfMemoryError, etc.

Le NoClassDefFoundError est un sous-type de la classe Error qui dit ou désigne l’environnement d’exécution Java ou (JRE) ne peut pas charger la définition de classe, qui était présente au moment de la compilation mais n’est pas disponible au moment de l’exécution. La classe Error réside dans le package javas.lang.

La classe NoClassDefFoundError réside sous LinkageError. L’Error est un type de problème de liaison qui entre en action ou se rencontre lorsque nous n’utilisons pas le bon IDE (Integrated Development Environment) comme IntelliJ IDEA, Eclipse, etc., et utilisons la console pour exécuter le programme.

L’IDE fonctionne de manière à compiler au préalable les classes qui dépendent de la classe principale. Mais dans une console ou un terminal, il est de la responsabilité de l’utilisateur de compiler toutes les classes dépendantes puis d’exécuter la classe principale, réduisant ainsi le risque d’erreur de type de liaison.

Comprenons l’Erreur à l’aide d’un bloc de code Java.

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");
  }
}

Dans le bloc de code ci-dessus, créez un fichier de classe Java avec le nom NoClassDefinitionError. Enregistrez le fichier avec l’extension .java.

Ensuite, ouvrez la classe dans le bloc-notes, copiez et collez le bloc de code dans le fichier de classe. Ouvrez une invite de commande et accédez à l’emplacement où le fichier est enregistré.

Exécutez la première commande pour compiler la commande du bloc de code javac NoClassDefinitionError.

La commande nécessite que la variable d’environnement PATH soit définie par défaut avant d’utiliser la commande javac. Assurez-vous que la variable PATH a l’emplacement bin de Java déjà ajouté au préalable.

Sinon, cela donnera une erreur car javac gets not recognized as an internal or external command, operable program, or batch file.

La commande javac permet au compilateur de créer un fichier .class qui n’est autre que la version byte code du fichier java. Ce fichier est facilement compréhensible par la machine virtuelle Java ou la JVM pour exécuter le programme.

Maintenant, atteignez l’emplacement où le fichier .java est enregistré. Il semble facile de localiser le fichier .class, qui est créé après avoir exécuté la commande javac. Supprimez manuellement le fichier A.class de l’emplacement.

Essayez d’exécuter la commande java NoClassDefinitionError.

La commande java exécute en interne l’application Java en chargeant tous les fichiers de classe dépendants et en recherchant la méthode principale. Lorsqu’il est incapable de trouver la définition de classe, il affiche une exception d’exécution.

Vous trouverez ci-dessous un petit bloc de code d’erreur qui se remplit lorsque cette Erreur survient.

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

Diverses résolutions pour éradiquer le problème lorsque nous rencontrons une erreur sont répertoriées ci-dessous.

  • Vérifiez que le nom de la classe qui s’exécute est à l’emplacement exact et souhaité.
  • Vérifier si des fichiers .class sont présents pour la classe java que l’on essaie d’exécuter. Si le fichier de classe n’est pas présent, commencez par compiler l’autre classe et obtenez le fichier de classe à générer.
  • Vérifiez les dépendances transitives et compilez les classes nécessaires pour exécuter le fichier de classe principal. A->B et B->C Dans ce cas, A est transitif dépendant de la classe C. La dépendance transitive dit une relation indirecte qui existe entre trois fichiers différents qui dépendent fonctionnellement les uns des autres.
  • L’utilisation directe de l’environnement IDE réduit les chances d’éviter les problèmes noClassDefFoundError, car la résolution des dépendances et les dépendances transitives seront gérées avant l’exécution réelle.
  • Examinez correctement la trace de la pile, car elle permet de bien comprendre où le problème commence à se remplir et son impact dans le flux de code à partir de tous les endroits où il est généré. La trace de la pile devrait aider à résoudre le problème.
  • Ajoutez l’emplacement où la commande Java s’exécute dans la variable CLASSPATH. La variable permet de localiser le chemin où les fichiers de classe doivent être sélectionnés et chargés lorsque le programme s’exécute dans Java Runtime Environment.
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

Article connexe - Java Error