167 votes

Comment résoudre l'exception ClassNotFoundException ?

J'essaie d'exécuter une application Java, mais j'obtiens cette erreur :

java.lang.ClassNotFoundException:

Après les deux-points vient l'emplacement de la classe qui manque. Cependant, je sais que cet emplacement n'existe pas puisque la classe est située ailleurs. Comment puis-je mettre à jour le chemin de cette classe ? Cela a-t-il quelque chose à voir avec le chemin de la classe ?

6voto

Vasil Points 109

Question générique de base - Réponse générique la plus simple ;)

Compte tenu de ces informations, je vais supposer que vous essayez une approche de base du codage, en construisant/compilant et en exécutant une application console simple comme "Hello World", en utilisant un éditeur de texte simple et un shell de commande.

Cette erreur se produit dans le scénario suivant :

..\SomePath>javac HelloWorld.java
..\SomePath>java HelloWorld.class

En d'autres termes, utilisez :

..\SomePath>java HelloWorld

P.S. L'ajout de l'extension de fichier .class produit la même erreur. Assurez-vous également que le dossier bin de Java (JDK/JRE) se trouve dans le PATH des variables d'environnement du système d'exploitation (pour plus de détails, consultez les autres articles sur ce sujet). P.P.S Mon hypothèse était-elle correcte ?

4voto

Arun Points 922

Essayez-les si vous utilisez maven. J'utilise maven pour mon projet et quand je fais mvn clean install et que vous essayez d'exécuter un programme, l'exception est levée. J'ai donc nettoyé le projet et l'ai relancé, et cela fonctionne pour moi.

J'utilise l'IDE eclipse.

Pour l'exception "Class Not Found" lors de l'exécution du test Junit, essayez d'exécuter le test suivant mvn clean test une fois. Il compilera toutes les classes de test.

4voto

Ajouter le chemin complet du fichier jar dans le CLASSPATH. Sous linux, utilisez : export CLASSPATH=".:/full/path/to/file.jar:$CLASSPATH" . L'autre façon de travailler (sans modifier le CLASSPATH) était de décompresser le jar dans le dossier du projet en cours.

Les moyens n'ont pas fonctionné pour moi :

1) Utilisation -cp avec le chemin complet du fichier jar.

2) Utilisation -cp avec uniquement le nom du jar lorsqu'il est situé dans le dossier courant

3) Copier le jar dans le dossier du projet actuel

4) Copier le jar à l'emplacement standard des jars java (/usr/share/java)

Cette solution est rapportée pour la classe com.mysql.jdbc.Driver dans mysql-connector-java.5-*.jar, fonctionnant sur linux avec OpenJDK version 1.7

4voto

trthhrtz Points 500

Si vous utilisez maven, vérifiez que vous avez ce plugin dans votre fichier pom.xml :

    <build>
        <plugins>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.2.0</version>
                <executions>
                    <!-- Attach the shade goal into the package phase -->
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

        </plugins>
    </build>

Il placera votre dépendance (la raison de l'exception) dans votre jar.

FYI : ceci inclura toutes les dépendances gonflées dans le jar final

3voto

invictvs1 Points 119

Pour ajouter l'emplacement d'une classe à votre classpath via la ligne de commande, il suffit d'ajouter -cp o -classpath et l'emplacement de la classe pendant son exécution. I.E.

java -cp "c:/location/of/file" YourProgram

Ou si vous utilisez un IDE tel qu'eclipse, vous pouvez cliquer avec le bouton droit de la souris sur l'écran de l'ordinateur. project -> build path -> configure build path et ajoutez le JAR externe contenant votre classe au chemin de construction, cela devrait fonctionner correctement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X