Que signifie "Impossible de trouver ou de charger la classe principale"?


Un problème courant rencontré par les nouveaux développeurs Java est que leurs programmes ne s'exécutent pas avec le message d'erreur: Could not find or load main class ...

Qu'est-ce que cela signifie, quelles sont les causes, et comment devriez-vous le réparer?

Author: Stephen C, 2013-08-07

30 answers

La syntaxe de commande java <class-name>

Tout d'abord, vous devez comprendre la bonne façon de lancer un programme en utilisant la commande java (ou javaw).

La syntaxe normale1 est-ce:

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

<option> est une option de ligne de commande (commençant par un caractère" -"), <class-name> est un nom de classe Java complet et <argument> est un argument de ligne de commande arbitraire qui est transmis à votre application.
1 - Il existe une deuxième syntaxe pour" exécutable " JAR fichiers que je vais décrire en bas.

Le nom complet (FQN) de la classe est classiquement écrit comme vous le feriez dans le code source Java; par exemple

packagename.packagename2.packagename3.ClassName

Notez que le termenom complet est la terminologie Java standard ... ce n'est pas quelque chose que j'ai inventé pour vous confondre: -)

Voici un exemple de ce à quoi devrait ressembler une commande java:

java -Xmx100m com.acme.example.ListUsers fred joe bert

Ce qui précède va provoquer la commande java pour faire le suivant:

  1. Recherchez la version compilée de la classe com.acme.example.ListUsers.
  2. Charger la classe.
  3. Vérifiez que la classe a une méthode main avec une signature , retourne le type et les modificateurs donnés par public static void main(String[]). (Notez que le nom de l'argument de la méthode est ET NON une partie de la signature.)
  4. Appelez cette méthode en lui passant les arguments de ligne de commande ("fred", "joe", "bert") en tant que String[].

Raisons pour lesquelles Java ne peut pas trouver le classe

Lorsque vous obtenez le message "impossible de trouver ou charger la classe principale ...", cela signifie que la première étape a échoué. La commande java n'a pas pu trouver la classe. Et en effet, le"..."dans le message sera le nom de classe complet que java recherche.

Alors pourquoi pourrait-il être incapable de trouver la classe?

Raison # 1-vous avez fait une erreur avec l'argument classname

La première cause probable est que vous avez fourni le mauvais nom de la classe. (Ou ... le bon nom de classe, mais sous la mauvaise forme.) Compte tenu de l'exemple ci-dessus, voici une variété de mauvaises façons pour spécifier le nom de la classe:

  • Exemple # 1 - un nom de classe simple:

    java ListUser
    

    Lorsque la classe est déclarée dans un paquet tel que com.acme.example, vous devez utiliser le nom de classe complet y compris le nom du paquet dans la commande java; par exemple

    java com.acme.example.ListUser
    
  • Exemple #2 - un nom de fichier ou un chemin plutôt qu'un nom de classe:

    java ListUser.class
    java com/acme/example/ListUser.class
    
  • Exemple # 3 - un nom de classe avec le boîtier incorrect:

    java com.acme.example.listuser
    
  • Exemple # 4 - une faute de frappe

    java com.acme.example.mistuser
    
  • Exemple #5-un nom de fichier source

    java ListUser.java
    
  • Exemple # 6-vous avez complètement oublié le nom de la classe

    java lots of arguments
    

Raison # 2-le chemin de classe de l'application est incorrectement spécifié

La deuxième cause probable est que le nom de la classe est correcte, mais que le java la commande ne peut pas trouver la classe. Pour comprendre cela, vous devez comprendre le concept de "classpath". Ceci est expliqué bien par la documentation Oracle:

Donc ... si vous avez spécifié le nom de la classe correctement, la prochaine chose à vérifier est que vous avez spécifié le chemin de classe correctement:

  1. Lire les trois documents liés ci-dessus. (Oui ... Les LIRE. Il est important qu'un programmeur Java comprenne au moins les bases du fonctionnement des mécanismes Java classpath.)
  2. Regardez la ligne de commande et / ou la variable d'environnement CLASSPATH qui est en vigueur lorsque vous exécutez la commande java. Vérifiez que les noms de répertoire et les noms de fichier JAR sont corrects.
  3. S'il y a des noms de chemin relatifs dans le chemin de classe, vérifiez que ils résolvent correctement ... à partir du répertoire courant qui est en vigueur lorsque vous exécutez la commande java.
  4. Vérifiez que la classe (mentionnée dans le message d'erreur) peut être située sur le chemin de classeeffective .
  5. Notez que la syntaxe classpath estdifférente pour Windows par rapport à Linux et Mac OS. (Le séparateur de chemin de classe est ; sur Windows et : sur les autres.)

Raison # 2a - le mauvais répertoire est sur le chemin de classe

Quand vous mettez un répertoire sur le chemin de classe, il correspond théoriquement à la racine de l'espace de noms qualifié. Les classes sont situées dans la structure de répertoires sous cette racine, en mappant le nom complet à un chemin . Ainsi, par exemple, si " / usr / local / acme / classes "est sur le chemin de la classe, alors lorsque la JVM recherche une classe appelée com.acme.example.Foon, elle recherchera un".class " fichier avec ce chemin:

/usr/local/acme/classes/com/acme/example/Foon.class

Si vous avez mis "/usr/local/acme/classes/com/acme/exemple" sur le classpath, alors la JVM ne serait pas en mesure de trouver la classe.

Raison # 2b - le chemin du sous-répertoire ne correspond pas au FQN

Si votre classe FQN est com.acme.example.Foon, alors la JVM va chercher "Foon.la classe" dans le répertoire "com/acme/exemple":

  • Si votre structure de répertoire ne correspond pas au nom du package selon le modèle ci-dessus, la JVM ne trouvera pas votre classe.

  • Si vous tentez de renommer une classe en la déplaçant, cela échouera Aussi... mais l'exception stacktrace sera différent.

Pour donner un exemple concret, en supposant que:

  • vous souhaitez exécuter com.acme.example.Foon classe,
  • le chemin complet du fichier est /usr/local/acme/classes/com/acme/example/Foon.class,
  • votre répertoire de travail actuel est /usr/local/acme/classes/com/acme/example/,

Puis:

# wrong, FQN is needed
java Foon

# wrong, there is no `com/acme/example` folder in the current working directory
java com.acme.example.Foon

# wrong, similar to above
java -classpath . com.acme.example.Foon

# fine; relative classpath set
java -classpath ../../.. com.acme.example.Foon

# fine; absolute classpath set
java -classpath /usr/local/acme/classes com.acme.example.Foon

Notes:

  • L'option -classpath peut être raccourcie à -cp dans la plupart des versions Java. Vérifiez les entrées manuelles respectives pour java, javac et ainsi sur.
  • Réfléchissez bien lorsque vous choisissez entre les noms de chemin absolus et relatifs dans les chemins de classe. N'oubliez pas qu'un chemin d'accès relatif peut "casser" si le répertoire actuel change.

Raison #2c-dépendances manquantes dans le chemin de classe

Le chemin de classe doit inclure toutes les autres classes (non-système) dont dépend votre application. (Les classes système sont situées automatiquement, et vous avez rarement besoin de vous en préoccuper. Pour le main classe pour charger correctement, la JVM doit trouver:

  • la classe elle-même.
  • toutes les classes et interfaces dans la hiérarchie des superclasses (par exemple, voir cette question)
  • toutes les classes et interfaces qui sont référencées au moyen de déclarations variables ou variables, ou d'expressions d'appel de méthode ou d'accès de champ.

(Remarque: les spécifications JLS et JVM permettent à une JVM de charger des classes "paresseusement", ce qui peut affecter lorsqu'un chargeur de classe exception est levée.)

Raison # 3 - la classe a été déclarée dans le mauvais paquet

Il arrive parfois que quelqu'un mette un fichier de code source dans le le mauvais dossier dans leur arborescence de code source, ou ils omettent la déclaration package. Si vous faites cela dans unE, le compilateur de l'E vous en parlera immédiatement. De même, si vous utilisez un outil de construction Java décent, l'outil s'exécutera javac d'une manière qui détectera le problème. Cependant, si vous construisez votre code Java à la main, vous pouvez le faire de telle sorte que le compilateur ne remarque pas le problème, et le résultat ".le fichier" class " n'est pas à l'endroit auquel vous vous attendez.

Vous ne trouvez toujours pas le problème?

Il y a beaucoup de choses à vérifier, et il est facile de manquer quelque chose. Essayez d'ajouter l'option -Xdiag à la ligne de commande java (comme la première chose après java). Il produira diverses choses sur le chargement des classes, ce qui peut vous offrir des indices sur le vrai problème être.

Considérez également les problèmes possibles causés par la copie et le collage de caractères invisibles ou non ASCII à partir de sites Web, de documents, etc. Et considérons "homoglyphes", étaient deux lettres ou symboles se ressemblent ... mais ne sont pas.


La syntaxe java -jar <jar file>

La syntaxe alternative utilisée pour les fichiers JAR "exécutables" est la suivante:

java [ <option> ... ] -jar <jar-file-name> [<argument> ...]

Par exemple

java -Xmx100m -jar /usr/local/acme-example/listuser.jar fred

Dans ce cas, le nom de la classe du point d'entrée (c'est-à-dire com.acme.example.ListUser) et le chemin de classe sont spécifiés dans le MANIFESTE du fichier JAR.


Es

UnE Java typique prend en charge l'exécution d'applications Java dans la JVM ID elle-même ou dans une JVM enfant. Ceux-ci sont généralement à l'abri de cette exception particulière, car l'EDI utilise ses propres mécanismes pour construire le chemin de classe d'exécution, identifier la classe principale et créer la ligne de commandejava.

Cependant, il est toujours possible que cette exception se produise, si vous faites des choses derrière le dos de l'E. Par exemple, si vous avez précédemment configuré un lanceur d'applications pour votre application Java dans Eclipse et que vous avez ensuite déplacé le fichier JAR contenant la classe "principale" à un endroit différent dans le système de fichiers sans le dire à Eclipse, Eclipse lancerait involontairement la JVM avec un chemin de classe incorrect.

En bref, si vous rencontrez ce problème dans unE, vérifiez les choses comme l'état st périmé, les références de projet cassées ou les configurations de lanceur cassées.

Il est également possible pour unE pour simplement se confondre. LesE sont des logiciels extrêmement compliqués comprenant de nombreuses parties en interaction. Beaucoup de ces parties adoptent diverses stratégies de mise en cache afin de rendre l'EDI dans son ensemble réactif. Ceux-ci peuvent parfois mal tourner, et un symptôme possible est des problèmes lors du lancement d'applications. Si vous pensez que cela pourrait se produire, cela vaut la peine de redémarrer votreE.


Autres Références

 922
Author: Stephen C, 2018-10-13 16:53:51

Si votre nom de code source est HelloWorld.java, votre code compilé sera HelloWorld.class.

Vous obtiendrez cette erreur si vous l'appelez en utilisant:

java HelloWorld.class

Utilisez plutôt ceci:

java HelloWorld
 190
Author: panoet, 2017-09-04 14:06:24

Si vos classes sont dans des packages, vous devez cd dans le répertoire principal et exécuter en utilisant le nom complet de la classe (packageName.MainClassName).

Exemple:

Mes cours sont ici:

D:\project\com\cse\

Le nom complet de ma classe principale est:

com.cse.Main

Donc je cd retour au répertoire principal:

D:\project

Puis lancez la commande java:

java com.cse.Main
 101
Author: tharinduwijewardane, 2017-01-14 16:54:38

Si votre méthode principale est dans la classe sous un paquet, vous devez l'exécuter sur le répertoire hiérarchique.

Supposons qu'il existe un fichier de code source (Principale.java):

package com.test;

public class Main {

    public static void main(String[] args) {
        System.out.println("salam 2nya\n");
    }
}

Pour exécuter ce code, vous devez placer Main.Class dans le package comme répertoire ./com/test/Main.Java. Et dans le répertoire racine, utilisez java com.test.Main.

 44
Author: M-Razavi, 2017-05-23 17:32:03

Lorsque le même code fonctionne sur un PC, mais qu'il montre l'erreur dans un autre, la meilleure solution que j'ai jamais trouvée est de compiler comme suit:

javac HelloWorld.java
java -cp . HelloWorld
 36
Author: Enamul Hassan, 2017-01-14 16:56:52

Ce qui m'a aidé, c'est de spécifier le chemin de classe sur la ligne de commande, par exemple:

  1. Créer un nouveau dossier, C:\temp

  2. Créer le fichier Temp.java dans C:\temp, avec la classe suivante:

    public class Temp {
        public static void main(String args[]) {
            System.out.println(args[0]);
        }
    }
    
  3. Ouvrez une ligne de commande dans le dossier C:\temp et écrivez la commande suivante pour compiler la classe Temp:

    javac Temp.java
    
  4. Exécutez la classe Java compilée, en ajoutant l'option -classpath pour permettre à JRE de savoir où trouver le classe:

    java -classpath C:\temp Temp Hello!
    
 27
Author: Celebes, 2017-01-14 16:51:55

Selon le message d'erreur ("Impossible de trouver ou de charger la classe principale"), il existe deux catégories de problèmes:

  1. La classe principale n'a pas pu être trouvée
  2. La classe principale n'a pas pu être chargée (ce cas n'est pas entièrement discuté dans la réponse acceptée)

Classe Principale n'a pas pu être a quand il y a faute de frappe ou de mauvaise syntaxe dans le nom de classe entièrement qualifié ou n'existe pas dans le classpath.

Classe principale impossible de charger lorsque la classe ne peut pas être initiée , généralement la classe principale étend une autre classe et cette classe n'existe pas dans le chemin de classe fourni.

Par exemple:

public class YourMain extends org.apache.camel.spring.Main

Si camel-spring n'est pas inclus, cette erreur sera signalée.

 21
Author: Xiao Peng - ZenUML.com, 2017-06-05 00:38:20

Parfois, ce qui pourrait causer le problème n'a rien à voir avec la classe principale, et j'ai dû le découvrir à la dure. C'était une bibliothèque référencée que j'ai déplacée, et cela m'a donné le:

Impossible de trouver ou de charger la classe principale xxx Linux

Je viens de supprimer cette référence, de l'ajouter à nouveau, et cela a fonctionné à nouveau.

 12
Author: Eduardo Dennis, 2017-01-14 16:49:21

J'ai eu une erreur dans ce cas:

java -cp lib.jar com.mypackage.Main

, Il travaille avec ; pour Windows et : pour Unix:

java -cp lib.jar; com.mypackage.Main
 12
Author: Yamahar1sp, 2017-04-09 10:30:52

, Utilisez cette commande:

java -cp . [PACKAGE.]CLASSNAME

Exemple: Si votre nom de classe est Hello.classe créée à partir de Bonjour.java utilise ensuite la commande ci-dessous:

java -cp . Hello

Si votre fichier Bonjour.java est à l'intérieur du paquet com.démo, puis utilisez la commande ci-dessous

java -cp . com.demo.Hello

Avec JDK 8 il arrive souvent que le fichier de classe soit présent dans le même dossier, mais la commande java attend classpath et pour cette raison nous ajoutons -cp . pour prendre le dossier actuel comme référence pour classpath.

 12
Author: shaILU, 2018-02-06 23:55:46

Essayez -Xdiag.

La réponse de Steve C couvre bien les cas possibles, mais parfois, déterminer si la classe ne pouvait pas être trouvée ou chargée n'est peut-être pas si facile. Utilisez java -Xdiag (depuis JDK 7). Cela imprime une belle stacktrace qui fournit un indice sur ce que signifie le message Could not find or load main class message.

Par exemple, il peut vous pointer vers d'autres classes utilisées par la classe principale qui n'ont pas pu être trouvées et ont empêché le chargement de la classe principale.

 10
Author: jan.supol, 2018-02-06 23:18:14

Dans ce cas, vous avez:

Impossible de trouver ou de charger la classe principale ?classpath

C'est parce que vous utilisez "-classpath", mais le tiret n'est pas le même tiret utilisé par java sur l'invite de commande. J'ai eu ce problème en copiant et en collant de Bloc-notes vers cmd.

 8
Author: Nathan Williams, 2017-01-14 16:55:34

Dans mon cas, une erreur est apparue car j'avais fourni le nom du fichier source au lieu du nom de la classe.

Nous devons fournir le nom de classe contenant la méthode principale à l'interpréteur.

 6
Author: KawaiKx, 2014-03-12 00:37:57

Cela pourrait vous aider si votre cas est spécifiquement comme le mien: en tant que débutant, j'ai également rencontré ce problème lorsque j'ai essayé d'exécuter un programme Java.

Je l'ai compilé comme ceci:

javac HelloWorld.java

Et j'ai essayé aussi avec la même extension:

java Helloworld.java

Lorsque j'ai supprimé le .java et réécrit la commande comme java HelloWorld, le programme a fonctionné parfaitement. :)

 6
Author: Ramesh Pareek, 2018-02-06 23:53:28

entrez la description de l'image ici

Emplacement du fichier de classe: C:\test\com\company

Nom De Fichier: Principal.classe

Nom complet de la classe: com.entreprise.Principal

Commande en ligne de Commande:

java  -classpath "C:\test" com.company.Main

Notez ici que le chemin de classe n'inclut PAS \com \ company

 5
Author: developer747, 2017-03-27 02:18:52

Si vous utilisez Maven pour construire le fichier JAR, assurez-vous de spécifier la classe principale dans le pom.fichier xml:

<build>
    <plugins>
        <plugin>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>class name us.com.test.abc.MyMainClass</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>
 5
Author: Junchen Liu, 2018-02-06 23:52:16

J'ai passé beaucoup de temps à essayer de résoudre ce problème. Je pensais que je définissais en quelque sorte mon chemin de classe de manière incorrecte mais le problème était que j'ai tapé:

java -cp C:/java/MyClasses C:/java/MyClasses/utilities/myapp/Cool  

Au Lieu de:

java -cp C:/java/MyClasses utilities/myapp/Cool   

Je pensais que la signification de fully qualified signifiait inclure le nom complet du chemin d'accès au lieu du nom complet du package.

 5
Author: mathewbruens, 2018-02-07 08:14:26

Définissez d'abord le chemin à l'aide de cette commande;

set path="paste the set path address"

Ensuite, vous devez charger le programme. Tapez "cd (nom du dossier)" dans le lecteur stocké et compilez-le. Par exemple, si mon programme est stocké sur le lecteur D, tapez "D:" appuyez sur Entrée et tapez " cd (nom du dossier)".

 4
Author: arun, 2013-12-02 14:33:34

Ce qui a résolu le problème dans mon cas était:

Faites un clic droit sur le projet / classe que vous souhaitez exécuter, puis Run As->Run Configurations. Ensuite, vous devez soit corriger votre configuration existante, soit en ajouter de la manière suivante:

Ouvrez l'onglet Classpath, cliquez sur le bouton Advanced... puis ajoutez bin dossier de votre projet.

 4
Author: syntagma, 2016-01-16 10:26:31

C'est un cas spécifique, mais comme je suis venu sur cette page à la recherche d'une solution et que je ne l'ai pas trouvée, je vais l'ajouter ici.

Windows (testé avec 7) n'accepte pas les caractères spéciaux (comme á) dans les noms de classe et de paquet. Linux le fait, cependant.

J'ai trouvé quand j'ai construit un .jar dans NetBeans et essayé de l'exécuter en ligne de commande. Il a fonctionné dans NetBeans mais pas en ligne de commande.

 3
Author: GuiRitter, 2015-12-27 00:26:16

Toutes les réponses ici sont dirigées vers les utilisateurs de Windows, semble-t-il. Pour Mac, le séparateur de chemin de classe est :, pas ;. Comme une erreur de définition du chemin de classe à l'aide de ; n'est pas levée, cela peut être difficile à découvrir si cela provient de Windows vers Mac.

Voici la commande Mac correspondante:

java -classpath ".:./lib/*" com.test.MyClass

Où dans cet exemple le paquet est com.test et un dossier lib doit également être inclus dans classpath.

 3
Author: blue-sky, 2017-01-20 19:24:53

Lors de l'exécution du java avec l'option -cp comme annoncé dans Windows PowerShell, vous pouvez obtenir une erreur qui ressemble à:

The term `ClassName` is not recognized as the name of a cmdlet, function, script ...

Pour que PowerShell accepte la commande, les arguments de l'option -cp doivent être contenus entre guillemets comme dans:

java -cp 'someDependency.jar;.' ClassName

Former la commande de cette façon devrait permettre à Java de traiter correctement les arguments classpath.

 3
Author: Chezzwizz, 2017-05-21 08:14:38

Parfois, dans certains compilateurs en ligne que vous pourriez avoir essayé, vous obtiendrez cette erreur si vous n'écrivez pas public class [Classname], mais juste class [Classname].

 3
Author: lor, 2017-08-18 18:29:30

D'accord, beaucoup de réponses déjà, mais personne n'a mentionné le cas où l'autorisation de fichier peut être le coupable. Lors de l'exécution, l'utilisateur n'a pas accès au fichier jar ou à l'un des répertoires du chemin. Par exemple considérons:

Fichier Jar dans /dir1/dir2/dir3/myjar.jar

User1 qui possède le pot peut faire:

# Running as User1
cd /dir1/dir2/dir3/
chmod +r myjar.jar

Mais cela ne fonctionne toujours pas:

# Running as User2
java -cp "/dir1/dir2/dir3:/dir1/dir2/javalibs" MyProgram
Error: Could not find or load main class MyProgram

C'est parce que l'utilisateur en cours d'exécution (User2) n'a pas accès à dir1, dir2, ou javalibs ou dir3. Cela peut rendre quelqu'un fou lorsque l'Utilisateur1 peut voir les fichiers et peut y accéder, mais l'erreur se produit toujours pour User2

 3
Author: biocyberman, 2018-09-26 12:33:35

Sous Windows, mettez .; à la valeur CLASSPATH au début.

Le. (dot) signifie "regarder dans le répertoire courant". C'est une solution permanente.

Vous pouvez également le définir "une fois" avec set CLASSPATH=%CLASSPATH%;.. Cela durera aussi longtemps que votre fenêtre cmd est ouvert.

 2
Author: Nenad Bulatovic, 2017-01-20 19:12:33

Vous devez vraiment le faire à partir du dossier src. Il vous tapez la ligne de commande suivante:

[name of the package].[Class Name] [arguments]

Disons que votre classe s'appelle CommandLine.class, et le code ressemble à ceci:

package com.tutorialspoint.java;

    /**
     * Created by mda21185 on 15-6-2016.
     */

    public class CommandLine {
        public static void main(String args[]){
            for(int i=0; i<args.length; i++){
                System.out.println("args[" + i + "]: " + args[i]);
            }
        }
    }

Alors vous devriez cd dans le dossier src et la commande que vous devez exécuter ressemblerait à ceci:

java com.tutorialspoint.java.CommandLine this is a command line 200 -100

Et la sortie sur la ligne de commande serait:

args[0]: this
args[1]: is
args[2]: a
args[3]: command
args[4]: line
args[5]: 200
args[6]: -100
 2
Author: mdarmanin, 2017-01-20 19:17:26

Dans mon cas, j'ai eu l'erreur parce que j'avais mélangé les noms de paquets en majuscules et minuscules sur un système Windows 7. La modification des noms de paquets en minuscules a résolu le problème. Notez également que dans ce scénario, je n'ai eu aucune erreur en compilant le .fichier java dans un.fichier de classe; il ne fonctionnerait tout simplement pas à partir du même répertoire (sous-sous-sous -).

 2
Author: Howard007, 2017-12-26 19:55:15

J'ai également fait face à des erreurs similaires lors du test d'une connexion JDBC Java MongoDB. Je pense qu'il est bon de résumer ma solution finale en bref afin qu'à l'avenir tout le monde puisse examiner directement les deux commandes et qu'il soit bon d'aller plus loin.

Supposons que vous soyez dans le répertoire où votre fichier Java et vos dépendances externes (fichiers JAR) existent.

Compiler:

javac -cp mongo-java-driver-3.4.1.jar JavaMongoDBConnection.java
  • -cp - argument classpath; passez tous les fichiers JAR dépendants un par un
  • *.java - C'est le fichier de classe Java qui a la méthode principale. sdsd

Exécuter:

java -cp mongo-java-driver-3.4.1.jar: JavaMongoDBConnection
  • Veuillez observer les deux-points (Unix) / virgule (Windows) après la fin de tous les fichiers JAR de dépendance
  • À la fin, observez le nom de la classe principale sans aucune extension (no .de la classe ou de .java)
 2
Author: khichar.anil, 2018-02-06 23:21:13

J'en ai eu un bizarre.

Erreur: Impossible de trouver ou de charger la classe principale mypackage.App

Il s'est avéré que j'avais une configuration pom (parent) dans le pom de mon projet.xml (pom de mon projet.xml pointait vers un pom parent.xml) et le chemin relatif était désactivé / incorrect.

Ci-dessous est une partie du pom de mon projet.xml

<parent>
    <groupId>myGroupId</groupId>
    <artifactId>pom-parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <relativePath>../badPathHere/pom.xml</relativePath>
</parent> 

Une fois que j'ai résolu le chemin relatif pom, l'erreur a disparu.

Allez comprendre.

 2
Author: granadaCoder, 2018-09-21 20:34:55

En Java, lorsque vous exécutez parfois la JVM à partir de la ligne de commande à l'aide de l'exécutable java et que vous essayez de démarrer un programme à partir d'un fichier de classe avec public static void main (PSVM), vous pouvez rencontrer l'erreur ci-dessous même si le paramètre classpath de la JVM est]}

Error: main class not found or loaded

Cela se produit si le fichier de classe avec PSVM n'a pas pu être chargé. Une raison possible à cela est que la classe peut implémenter une interface ou étendre une autre classe qui n'est pas sur le chemin de classe. Normalement, si une classe n'est pas sur le chemin de classe, l'erreur levée indique en tant que telle. Mais, si la classe utilisée est étendue ou implémentée, java ne peut pas charger la classe elle-même.

Référence: https://www.computingnotes.net/java/error-main-class-not-found-or-loaded/

 1
Author: Anandaraja Ravi, 2015-09-18 03:01:01