web-dev-qa-db-fra.com

NoClassDefFoundError: nom incorrect

J'ai écrit un programme Java pour tester les services Web RESTful en utilisant Netbeans7.0.1 et cela fonctionne très bien là-bas. Maintenant, j'ai écrit le fichier build.xml pour compiler le code et quand j'essaie d'exécuter le généré Fichier .class J'ai toujours eu 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'accès sont corrects, alors quelles sont les raisons pour lesquelles je reçois cette exception?

54
thinkBig

Exception dans le thread "principal" Java.lang.NoClassDefFoundError: ClientREST

Vous l'avez donc exécuté en tant que Java ClientREST. Il attend un ClientREST.class sans package.


(nom incorrect: clientrest/ClientREST)

Hé, la classe essaie de vous dire qu'elle a un package clientrest;. Vous devez l'exécuter à partir de la racine du package. Remontez d'un dossier pour vous trouver dans le dossier qui contient à son tour le dossier clientrest représentant le package, puis exécutez Java clientrest.ClientREST.

Vous devez pas aller dans le dossier du package clientrest et exécuter Java ClientREST.

99
BalusC

J'ai rencontré cette erreur en utilisant la ligne de commande Java:

Java -cp stuff/src/mypackage Test

Test.Java réside dans le package mypackage.

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

Donc, cela finira par ressembler à ceci:

Java -cp stuff/src mypackage.Test

9
Gaʀʀʏ

Pour en savoir plus sur 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 devez référencer le chemin de classe comme suit:

/ accueil/personne/javastuff/cours

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

Java -cp/home/person/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 fait travailler le mien sans avoir le chemin de la classe dans l'environnement

4
Slaphead

Essayez la syntaxe ci-dessous:

Supposons que Java Le fichier réside ici: fm/src/com/gsd/FileName.Java

Vous pouvez donc exécuter en utilisant la syntaxe ci-dessous:

(Transformez le répertoire courant en 'fm')

Java src.com.gsd.FileName

2
ShivaMahesh

L'emplacement dans lequel vous générez vos classes n'existe probablement pas sur le chemin d'accès aux classes. Lors de l'exécution, utilisez l'argument jvm -verbose lors de l'exécution et vérifiez le journal si la classe est en cours de chargement ou non.

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

2
Swapnil