NoClassDefFoundError: nombre incorrecto

Escribí un progtwig Java para probar los servicios web RESTful utilizando Netbeans7.0.1 y funciona bien allí. Ahora escribí el archivo build.xml para comstackr el código y cuando trato de ejecutar el archivo .class generado siempre obtuve esta excepción:

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. 

El nombre y la ruta son correctos, así que ¿por qué tengo esta excepción?

Excepción en el hilo “principal” java.lang.NoClassDefFoundError: ClientREST

Entonces, lo ejecutó como java ClientREST . ClientREST.class un ClientREST.class sin ningún package .


(nombre incorrecto: clientrest / ClientREST)

Oye, la clase está tratando de decirte que tiene un package clientrest; . Debe ejecutarlo desde el paquete raíz. Vaya una carpeta hacia arriba para que esté en la carpeta que a su vez contiene la carpeta clientrest representa el paquete y luego ejecute java clientrest.ClientREST .

No debe ingresar a la carpeta del paquete de clientrest y ejecutar java ClientREST .

Encontré este error usando la línea de comando java:

java -cp stuff/src/mypackage Test

donde Test.java reside en el paquete mypackage .

En su lugar, debe establecer classpath -cp en la carpeta base, en este caso, src, y anteponer el paquete al nombre del archivo.

Entonces terminará luciendo así:

java -cp stuff/src mypackage.Test

Para tomar nota adicional de la respuesta de Garry: La ruta de la clase es el directorio base donde reside la clase. Entonces, si el archivo de clase está aquí,

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

Debería hacer referencia a la ruta de clase de la siguiente manera:

/ home / persona / javastuff / clases

Entonces, para ejecutar desde la línea de comando, el comando completo sería:

java -cp / home / person / javastuff / classes paquete1 / subpaquete / javaThing

es decir, la plantilla para lo anterior es

java_executable -cp classpath the_class_itself_within_the_class_path

Así es como finalmente conseguí que el mío funcionara sin tener el camino de clase en el entorno

Probablemente la ubicación en la que está generando sus clases no existe en la ruta de clase. Mientras se ejecuta, use el archivo jvm arg -verbose mientras se ejecuta y verifique si la clase se está cargando o no.

El resultado también le dará una pista de dónde se cargan los clasess, asegúrese de que los archivos de su clase estén presentes en esa ubicación.

Prueba la siguiente syntax:

Supongamos que el archivo java reside aquí: fm/src/com/gsd/FileName.java

Para que pueda ejecutar usando la siguiente syntax:

(Haga que el directorio actual sea ‘fm’)

java src.com.gsd.FileName