NoClassDefFoundError: nom incorrect

J’ai écrit un programme java pour tester les services Web RESTful en utilisant Netbeans7.0.1 et ça marche très bien là-bas. Maintenant, j’ai écrit le fichier build.xml pour comstackr le code et quand j’essaie d’exécuter le fichier .class généré, j’ai toujours cette exception:

Exception in thread "main" java.lang.NoClassDefFoundError: ClientREST (wrong name: clientrest/ClientREST) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632) at java.lang.ClassLoader.defineClass(ClassLoader.java:616) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) at java.net.URLClassLoader.access$000(URLClassLoader.java:58) at java.net.URLClassLoader$1.run(URLClassLoader.java:197) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:248) Could not find the main class: ClientREST. Program will exit. 

Le nom et le chemin d’access sont corrects, alors quelles sont les raisons pour lesquelles je reçois cette exception?

Exception dans le thread “main” java.lang.NoClassDefFoundError: ClientREST

Donc, vous l’avez exécuté en tant que java ClientREST . Il attend une ClientREST.class sans aucun package .


(faux nom: clientrest / ClientREST)

Hey, la classe essaie de vous dire qu’elle a un package clientrest; . Vous devez l’exécuter à partir de la racine du package. Accédez à un dossier afin que vous soyez dans le dossier qui contient à son tour le dossier clientrest représentant le package, puis exécutez java clientrest.ClientREST .

Vous ne devez pas entrer dans le dossier du package clientrest et exécuter java ClientREST .

J’ai rencontré cette erreur en utilisant la ligne de commande java:

java -cp stuff/src/mypackage Test

Test.java réside dans le paquet mypackage .

Au lieu de cela, vous devez définir le chemin de -cp dans le dossier de base, dans ce cas, src, puis append le paquet au nom du fichier.

Donc, ça va finir par ressembler à ceci:

java -cp stuff/src mypackage.Test

Pour noter plus en détail la réponse de Garry: Le chemin de classe est le répertoire de base où réside la classe elle-même. Donc, si le fichier de classe est ici –

/home/person/javastuff/classes/package1/subpackage/javaThing.class

Vous devrez référencer le chemin de classe comme suit:

/ home / personne / javastuff / cours

Donc, pour exécuter à partir de la ligne de commande, la commande complète serait –

java -cp / home / personne / javastuff / classes package1 / subpackage / javaThing

c’est-à-dire que le modèle pour ce qui précède est

java_executable -cp classpath the_class_itself_within_the_class_path

C’est comme ça que j’ai finalement réussi à faire fonctionner le mien sans avoir le chemin de classe dans l’environnement

L’emplacement dans lequel vous générez vos classes n’existe probablement pas sur le chemin de classe. En cours d’exécution, utilisez l’argument jvm -verbose lors de l’exécution et vérifiez le journal, que la classe soit chargée ou non.

La sortie vous donnera également un indice quant à l’origine de la charge, assurez-vous que vos fichiers de classe sont présents à cet emplacement.

Essayez la syntaxe ci-dessous:

Supposons que le fichier Java se trouve ici: fm/src/com/gsd/FileName.java

Vous pouvez donc utiliser la syntaxe ci-dessous:

(Rendre le répertoire actuel à “fm”)

java src.com.gsd.FileName