java - not - NoClassDefFoundError: nombre incorrecto
java.lang.noclassdeffounderror wrong name (5)
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
.
Escribí un programa Java para probar los servicios web RESTful utilizando Netbeans7.0.1 y funciona bien allí. Ahora escribí el archivo build.xml para compilar 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?
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 sintaxis:
Supongamos que el archivo java reside aquí: fm/src/com/gsd/FileName.java
Para que pueda ejecutar usando la siguiente sintaxis:
(Haga que el directorio actual sea ''fm'')
java src.com.gsd.FileName