not - java.lang.noclassdeffounderror wrong name
excepción en el hilo ''main'' java.lang.NoClassDefFoundError: (20)
Archivo Java:
package com.beans;
public class Flower{
.......
}
packages :=> com.beans,
java class Name:=> Flower.java,
Folder structure (assuming):=> C:/com/beans/Flower.*(both .java/.class exist here)
entonces hay dos formas de ejecutarlo:
1. Goto top Folder (here its C:/>),
then : C:> java com.beans.Flower
2. Executing from innermost folder "beans" here (C:/com/beans:>),
then: C:/com/beans:> java -cp ./../.. com.beans.Flower
El siguiente programa está lanzando error:
public class HelloWorld {
public static void main(String args[]) {
System.out.println("Hello World!");
}
}
CLASSPATH C:/Program Files/Java/jdk1.6.0_18/bin/
Path C:/Program Files/Java/jdk1.6.0_18/bin/
JAVAHOME C:/Program Files/Java/jdk1.6.0_18/bin
¿Puedes decirme la causa raíz, por favor?
Esta es la forma larga de los comandos de Java que se pueden ejecutar desde un indicador de comandos de Windows:
"C:/Program Files/Java/jdk1.6.0_18/bin/javac.exe" -classpath "C:/Users/Scott/workspace/myproject" com/mycompany/myapp/HelloWorld.java
"C:/Program Files/Java/jdk1.6.0_18/bin/java.exe" -classpath "C:/Users/Scott/workspace/myproject" com.mycompany.myapp.HelloWorld
- Estos comandos se pueden ejecutar desde cualquier directorio, lo que significa que no tiene que estar en el directorio donde se encuentra su archivo HelloWorld.java.
- La primera línea compila su archivo HelloWorld.java, creando un archivo HelloWorld.class.
- La segunda línea ejecuta el archivo HelloWorld.class.
- El -classpath le dice a java dónde buscar el archivo especificado en cada comando
- El compilador de Java (javac.exe) espera la ubicación del archivo java, en relación con el classpath (es decir, el archivo se encuentra en C: / Users / Scott / workspace / myproject / com / mycompany / myapp / HelloWorld.java)
- Java (java.exe) espera el paquete (es decir, com.mycompany.myapp) y la clase (HelloWorld), en relación con el classpath (es decir, el archivo se encuentra en C: / Users / Scott / workspace / myproject / com / mycompany / myapp / HelloWorld.class)
Observe que la ruta de clase no tiene barra al final. Los comandos javac.exe esperan que el archivo termine con ".java". El comando java.exe espera el nombre completo de la clase y no termina con ".class".
Hay algunas formas de simplificar estos comandos:
- No tienes que especificar la ruta completa a java.exe. Agregue Java a la ruta de Windows (Run-> sysdm.cpl-> Advanced Tab-> Environment Variables-> Select Path-> Edit-> Append "; C: / Archivos de programa / Java / jdk1.6.0_18 / bin /") . O puede agregar JAVA_HOME y crear esa variable de entorno.
No tiene que ingresar la ruta de clase completa (es decir, puede usar -classpath "."). Ingrese el directorio en el que trabajará:
cd "C: / Users / Scott / workspace / myproject /"
Puede usar el paquete predeterminado (ponga el directorio de archivos HelloWorld.java en su directorio de trabajo y no use la directiva del paquete Java)
Si realiza estos cambios, ejecutaría algo como esto (y podría omitir -classpath "."):
cd "C:/Users/Scott/workspace/myproject/"
javac -classpath "." HelloWorld.java
java -classpath "." HelloWorld
Ejecutalo de esta manera:
java -jar HelloWorld.jar
El javadoc de NoClassDefFounError en sí mismo sería un buen comienzo ( here) , y luego te sugeriré que limpies y reconstruyas tu proyecto.
El problema aquí es la configuración del entorno y la ejecución del archivo de clase. a. Para establecer la ruta del entorno, ejecute el siguiente comando: establecer ruta = C: / Archivos de programa (x86) / Java / jdk1.7.0 / bin b. ejecuta el programa desde el paquete como com.test.TestJavaClass
Comando: java com.test.TestJavaClass
El problema general aquí es que lo ejecutamos desde dentro del paquete como src / package / name. No debemos incluir src, el nombre del paquete es suficiente.
Esto es lo que finalmente funcionó.
`@echo off
set path=%path%;C:/Program Files/Java/jdk1.7.0_71/bin;
set classpath=C:/Program Files/Java/jdk1.7.0_71/lib;
cd <packageDirectoryName>
javac ./trainingPackage/HelloWorld.java
cd ..
java trainingPackage.HelloWorld
REM (Make sure you are on the parent directory of the PackageName and not inside the Packagedirectory when executing java).`
La variable CLASSPATH
debe incluir el directorio donde se encuentra el archivo .class de sus programas Java. Puede incluir ''.'' en CLASSPATH
para indicar que se debe incluir el directorio actual.
set CLASSPATH=%CLASSPATH%;.
Me he encontrado una razón común. Si crea el archivo java dentro de un paquete utilizando IDE como eclipse, encontrará el nombre del paquete en la parte superior de su archivo java como "package pkgName". Si intenta ejecutar este archivo desde el símbolo del sistema, obtendrá el error NoClassDefFoundError. Elimine el nombre del paquete del archivo java y use los comandos en el símbolo del sistema. Perdió 3 horas por esto. - Abhi
En mi caso, el nombre del paquete estaba escrito en letras pequeñas, aunque el nombre del paquete estaba en mayúscula. Abhi, muchas gracias.
Pasé cuatro horas probando varias permutaciones y sugerencias de búsqueda.
Por fin, encontré esta publicación que funcionó pero no la mejor solución para cambiar el código original para probarlo.
- Se intentó cambiar CLASSPATH, para incluir bibliotecas de clases,
set classpath=JDKbin;JDKlib;JREbin;JRElib;myClassLib;.
- Se modificó el directorio actual por el directorio principal (carpeta del paquete) y se
java <packageName>.<className>
también probé eljava ../<packageName>.<className>
Tampoco funcionó.
Sin embargo la primera respuesta solo funcionó. Muchas gracias Abhi !!!
"Encontré otra razón común. Si creas el archivo java dentro de un paquete usando IDE como eclipse, encontrarás el nombre del paquete en la parte superior de tu archivo java como" package pkgName ". Si intentas ejecutar este archivo desde el comando recibirá el error NoClassDefFoundError. Elimine el nombre del paquete del archivo java y use los comandos en el símbolo del sistema. Perdió 3 horas por esto. - Abhi "
¿Tiene curiosidad si hay alguna otra forma de hacerlo funcionar sin tener que cambiar el código original? ¡Gracias!
Si desea "compilar y ejecutar" cualquier archivo java que haya creado utilizando cualquier IDE (como eclipse), simplemente ejecute los siguientes comandos:
Compile:
javac Users/dhiraj01/workspace/Practice/src/PracticeLogic/Logics.java
Ejecute:
java -classpath Users/dhiraj01/workspace/Practice/src/ PracticeLogic.Logics
Si su Program.java está en el directorio "src / mypkg / subpkg /":
ir a "src" dir
Luego, para compilar use "javac mypkg / subpkg / Program.java"
Para ejecutar use "java mypkg.subpkg.Program.class"
Si su paquete es helloworld
, debe ir al directorio principal de su paquete y luego ejecutar:
java helloworld.HelloWorld
Su CLASSPATH
debe conocer la ubicación de su clase HelloWorld
.
En términos sencillos debes añadir punto .
(significa directorio actual) en CLASSPATH
si está ejecutando los comandos javac
y java
desde el indicador de DOS.
Trata de hacerlo
javac Hello.java
y luego, si aparece sin errores de compilación (que no debería hacer porque no puedo ver ningún error en su programa), escriba
java Hello
Tuve el mismo problema, y encontré una solución con ''Build Main Project F11''. El id trajo una "opción" que querría desmarcar "Compilar en Guardar" en la parte de Compilación> Compilación del diálogo de configuración del Proyecto. Desmarcar ''Complile on Save'' y luego hacer lo habitual (para mí) ''Clean and Build'' hizo el truco para mí.
Tuve este error porque tenía mis archivos dentro de un paquete. Así que mi paquete foo tuve que llamar como:
java foo.HelloWorld
Tuvo el mismo problema intentado por encima de soluciones pero ninguno funcionó Tuve que revisar mi código Java solo para encontrar que la función principal no podía ser reconocida ya que no había espacio entre ella y (String), es decir, el código inicial:
public static void main(String[]args){
Código de trabajo.
public static void main (String[]args){
Espero haber ayudado a alguien.
escriba lo siguiente en el indicador de cmd, dentro de su carpeta:
set classpath=%classpath%;.;
Solución fácil y simple: resolví este problema (NetBeans) exportando el proyecto original al archivo zip, borrando el directorio del proyecto original e importando el proyecto de nuevo desde el archivo zip.
Exception in thread "main" java.lang.NoClassDefFoundError
Uno de los lugares donde java intenta encontrar su archivo .class
es su directorio actual. Entonces, si su archivo .class
está en C:/java
, debe cambiar su directorio actual a ese.
Para cambiar su directorio, escriba el siguiente comando cuando se le solicite y presione Entrar:
cd c:/java
Esto le dice a java que su classpath es su directorio local.
Executing your program using this command should correct the problem:
java -classpath . HelloWorld