Erreur : impossible de trouver ou charger la classe principale

L’erreur Impossible de trouver ou charger la classe principale se produit lors de l’utilisation de
la commande java dans l’invite de commande pour lancer un programme Java en spécifiant le nom de classe dans le terminal. La raison pour laquelle cela se produit est principalement due à une erreur de programmation lors de la déclaration de la classe.

Comme mentionné précédemment, cette erreur n’est généralement pas liée au système et l’utilisateur fait une erreur dans plusieurs scénarios, comme indiqué ci-dessous.
 
 

Qu’est-ce qui cause l’erreur « Impossible de trouver ou de charger la classe principale » en Java?

Le message Impossible de trouver ou charger la classe principale signifie que la première étape du moteur Java récupérant la classe pour exécution a échoué. La commande java n’a pas pu localiser la classe dans le bon répertoire.

Dans certains cas, vous devez ajouter le chemin de fichier correct et pointer le terminal Java vers l’emplacement correct. Étant donné que vous exécutez la commande à partir de la ligne de commande, l’ordinateur ne sait pas où se trouve la classe. Dans les IDE, ce n’est pas le problème car l’IDE garde un pointeur pointant vers le répertoire courant.
 

A quoi sert la syntaxe ‘java <class-name>’ ?

Avant de commencer à diagnostiquer la raison pour laquelle le terminal nous renvoie une erreur lors de la tentative d’exécution, nous devons d’abord examiner la syntaxe de la commande. Si vous n’utilisez pas la syntaxe correcte, vous serez inévitablement confronté à cette erreur.

La syntaxe normale de la commande ressemble à ceci:

 java [ <option> ... ] <class-name> [<argument> ...]

Ici, <option> est une option de la ligne de commande, <class-name> est le nom de classe Java complet et <argument> est un argument de la ligne de commande qui est transmis à votre application lorsque le package entier est compilé.

Voici un exemple de commande valide :

java -X com.waytolearnx.test.MaClasse arg1 arg2 arg3

La commande java ci-dessus exécute les opérations suivantes:

  • Il recherchera une version compilée de la classe « com.waytolearnx.test.MaClasse ».
  • Après la recherche, il chargera la classe.
  • Ensuite, lorsque la classe est chargée, la classe recherchera une méthode « principale » avec une signature et un type de retour valides. Un exemple de méthode principale serait quelque chose comme suit:
public static void main(String[])

La méthode sera appelée avec les arguments « arg1 », « arg2 » et « arg3 » sous forme de chaîne [].
 
 

Comment fixer l’erreur « Impossible de trouver ou charger la classe principale »
Solution 1: Vérifier le nom de la classe

L’erreur la plus courante que commettent les utilisateurs est qu’ils fournissent un mauvais nom de classe comme argument. Puisque nous déclarons des paramètres sur la ligne de commande, il est fort probable que vous passiez l’argument du nom de classe sous une forme incorrecte. Ici, nous énumérerons tous les scénarios possibles où vous pouvez faire une erreur.

Écrire un nom de classe simple. Si vous déclarez la classe dans un package tel que ‘com.waytolearnx.test’, vous devez utiliser le nom de classe complet, y compris le package dans la commande Java.

java com.waytolearnx.test.MaClasse

au lieu de

java MaClasse

Vous devez déclarer le nom de la classe au lieu de déclarer un nom de fichier ou un chemin d’accès. Java ne récupère pas la classe si vous lui déclarez un chemin/nom de fichier. Exemple des entrées incorrectes :

java MaClasse.class

java com/waytolearnx/test/MaClasse.class

La case doit être pris en considération. Les commandes Java sont sensibles à la casse et si vous vous trompez d’une seule lettre, vous ne pourrez pas charger la classe principale. Voici un exemple incorrecte:

java com.waytolearnx.test.maClasse

Vous ne devez pas déclarer le nom de fichier source. Comme mentionné précédemment, il vous suffit de déclarer la classe au format complet correct. Voici un exemple incorrecte:

java MaClasse.java

 
 

Solution 2: Vérifier le package de la classe

Peu importe la façon dont les fichiers de classe sont créés, mais ce qui est important, c’est l’emplacement du fichier de classe.

Si votre classe se trouve dans un package, par exemple « org » dans notre cas, le compilateur mettra le fichier MaClasse.class, qui contient le bytecode Java dans un répertoire nommé « org ». Dans notre cas, le nom complet de la classe org.MaClasse et il est présent dans C:\Users\PC\Desktop\Path\to\classes\org. Donc, dans le premier essai, on va exécuter la commande java pour lancer notre programme, comme indiqué ci-dessous:

C:\Users\PC\Desktop\Path\to\classes\org > java MaClasse
Erreur : impossible de trouver ou charger la classe principale

Avez-vous constater l’erreur? Cela vient parce que le nom complet de la classe doit être org.MaClasse et non MaClasse. Corrigeons donc cette erreur et essayons d’exécuter la même commande à partir du même emplacement mais cette fois avec un nom complet:

C:\Users\PC\Desktop\Path\to\classes\org > java org.MaClasse
Erreur : impossible de trouver ou charger la classe principale

Toujours la même erreur. Pourquoi? parce que je n’ai pas de variable d’environnement CLASSPATH, ni j’utilise l’option -classpath ou -cp pour suggérer le chemin, donc par défaut Java ne recherche que dans le répertoire courant. Il recherche org/MaClasse.class mais comme nous sommes déjà dans org, il n’est pas en mesure de trouver la classe. Alors, que devons-nous faire maintenant? allons dans le répertoire parent « C:\Users\PC\Desktop\Path\to\classes » et exécutons la même commande, cette fois, cela devrait fonctionner:

C:\Users\PC\Desktop\Path\to\classes\org > cd ..

C:\Users\PC\Desktop\Path\to\classes > java org.MaClasse
Hello World!

Maintenant, notre programme s’est déroulé avec succès car, sans aucune indication sur l’endroit où trouver les fichiers de classe, Java recherche par défaut le répertoire courant, désigné par .(point) et capable de localiser ./org/MaClasse.class.

Maintenant, que se passe-t-il si vous souhaitez exécuter ce programme à partir d’un autre répertoire? Eh bien, à cette fin, que nous ayons besoin de définir CLASSPATH ou simplement d’utiliser l’option -classpath ou -cp.

Maintenant, exécutons le programme à partir du répertoire ‘to’ sans utiliser l’option -classpath:

C:\Users\PC\Desktop\Path\to\classes > cd ..

C:\Users\PC\Desktop\Path\to > java org.MaClasse
Erreur : impossible de trouver ou charger la classe principale

Vous pouvez voir que nous recommençons à obtenir la même erreur, pourquoi? car Java recherche toujours dans le répertoire actuel et il n’y a pas de .\to\org\MaClasse.class là-bas, car c’est un niveau plus bas, par exemple .\to\classes\org\MaClasse.class

Maintenant, exécutons la même commande en utilisant l’option -classpath dans le répertoire ‘to’:

C:\Users\PC\Desktop\Path\to > java -cp ./classes;. org.MaClasse
Hello World!

Notre programme fonctionne à nouveau avec succès car maintenant Java regarde également le répertoire ./classes et il est capable de trouver le fichier org\MaClasse.class.
 

Conclusion:

Si toutes les solutions ci-dessus s’applique dans votre cas, vous devez vous assurer que votre code source est placé dans le bon dossier. En plus, vous avez correctement déclaré le package. Si vous exécutez votre code avec un IDE, il vous informera probablement du problème. Cependant, dans notre cas, puisque nous l’exécutons dans l’invite de commande, l’erreur passera inaperçue et vous obtiendrez l’erreur Impossible de trouver ou charger la classe principale.
 

Partagez cet article

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *