agregar - Error "No se pudo encontrar o cargar la clase principal" al ejecutar el programa Java con el comando cmd
java classpath command line (13)
Estoy ejecutando un programa simple "HelloWorld". Aparece este error en el símbolo del sistema:
No se pudo encontrar o cargar la clase principal
HelloWorld
.
Establecí la variable CLASSPATH
y PATH
en el sistema. En el símbolo del sistema de cmd
, me estoy ejecutando desde el directorio donde HelloWorld
programa HelloWorld
. Puedo ver que el nombre de la clase y el nombre del archivo son los mismos y también el archivo .class
creado en el mismo directorio. ¿Qué otra cosa podría ser el problema?
Mi programa de ejemplo se ve así:
package org.tij.exercises;
public class HelloWorld {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Hello World!!");
}
}
¿Cuál es tu valor CLASSPATH
?
Puede verse así:
.;%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/lib/tools.jar
Supongo que tu valor no contiene esto .;
.
Entonces, AGREGALO .
Cuando termine, reinicie CMD
Eso puede funcionar
Por ejemplo, el archivo HelloWorld.java
está en la ruta: D:/myjavatest/org/yz/test
y su package
es: org.yz.test
.
Ahora, estás en la ruta D:/myjavatest/
en la línea CMD.
Escriba esto para compilarlo:
javac org/yz/test/HelloWorld.java
Luego, escribe esto para ejecutarlo:
java org.yz.test.HelloWorld
Puede obtener lo que quiere.
Como lo está ejecutando desde el símbolo del sistema, debe asegurarse de que su classpath sea correcta. Si ya lo configuró, debe reiniciar su terminal para volver a cargar las variables de su sistema.
Si -classpath
y -cp
no se usan y CLASSPATH
no está configurado, se usa el directorio actual ( .
); Sin embargo, cuando se ejecutan archivos .class
, debe estar en la carpeta que contiene las carpetas de nombres de paquetes de Java .
Entonces, al tener el archivo .class
en ./target/classes/com/foo/app/App.class
, tiene las siguientes posibilidades:
java -cp target/classes com.foo.app.App
CLASSPATH=target/classes java com.foo.app.App
cd target/classes && java com.foo.app.App
Puede verificar su classpath, imprimiendo la variable CLASSPATH
:
- Linux:
echo $CLASSPATH
- Windows:
echo %CLASSPATH%
que tiene entradas separadas por :
Ver también: ¿Cómo puedo ejecutar archivos Java .class?
Cree una carpeta org / tij / exercises y luego mueva el archivo HelloWorld.java. Luego ejecuta el comando debajo
javac -cp . org/tij/exercises/HelloWorld.java
Y
java -cp . org/tij/exercises/HelloWorld
Cuando la clase principal está dentro de un paquete, debe ejecutarla de la siguiente manera:
java <packageName>.<MainClassName>
En su caso, debe ejecutar el programa de la siguiente manera:
java org.tij.exercises.HelloWorld
Ejecute su programa Java usando java -d . HelloWorld
Comando java -d . HelloWorld
.
Este comando funciona cuando has declarado el paquete.
.
representar el directorio actual /.
Enfrenté el mismo problema e intenté con todo lo mencionado aquí. El caso es que no actualicé mi proyecto en eclipse después de la creación de la clase. Y una vez que lo refresqué las cosas funcionaron como se esperaba.
Obtuve exactamente el mismo error al olvidar eliminar la extensión .class cuando ejecuté la clase JAVA. Entonces en vez de esto:
java myClass.class
Uno debería hacer esto:
java myClass
Para muchos de nosotros, al menos para mí, creo que la jerarquía de la ruta de clases no es intuitiva ya que estoy trabajando dentro de una estructura de directorios y se siente como debería ser.
Java está buscando el nombre de la clase en función de la ruta del paquete, no solo de la ruta del archivo.
No importa si: estoy en el directorio local ./packagefoo/MainClass, o un directorio arriba ./packagefoo/, o uno abajo ./packagefoo/MainClass/foo.
El comando "java packagefoo.MainClass" se está ejecutando desde la raíz% CLASSPATH%, lo que significa algo significativo para Java. Luego, desde allí, atraviesa los nombres de los paquetes, no nombres de ruta como nosotros, los codificadores de lo que cabría esperar.
Entonces, si mi CLASSPATH está configurada en% CWD% /, entonces funcionará "java packagefoo.MainClass". Si configuro CLASSPATH en% CWD% / packagefoo / then packagefoo.MainClass no se puede encontrar. Siempre "java MainClass" no significa nada, si es miembro de "paquete", hasta que arranco el código java "package packagefoo"; y mueva el archivo de clase a un directorio.
De hecho, si cambio "package packagefoo"; para "empaquetar foopackage"; Tengo que crear una subcarpeta en CLASSPATH / foopackage o foopackage.MainClass deja de funcionar de nuevo.
Para empeorar las cosas, entre PATH, CLASSPATH, JAVAHOME, para Windows, JDeveloper, Oracle Database y cada nombre de usuario con el que se instaló, creo que un codificador que intenta obtener algo rápidamente termina forzando brutales variables de ruta y estructura hasta que algo funciona sin entender lo que significa.
al menos yo lo hice
Quité bin
de CLASSPATH
. Descubrí que estaba ejecutando el comando java
desde el directorio donde se encuentra HelloWorld.java
, es decir:
C:/Users/xyz/Documents/Java/javastudy/src/org/tij/exercises>java HelloWorld
Así que volví al directorio principal y ejecuté:
java org.tij.exercises.HelloWorld
y funcionó, es decir:
C:/Users/xyz/Documents/Java/javastudy/src>java org.tij.exercises.HelloWorld
¡¡Hola Mundo!!
Tuve el mismo problema, el mío era un poco diferente, aunque no tenía un nombre de paquete. Mi problema era la ruta de clase, por ejemplo:
C:/Java Example>java -cp . HelloWorld
La opción -cp
para Java y por lo que puedo decir de mi experiencia (no mucho) pero encontré el error unas 20 veces probando diferentes métodos y hasta que declare que la clase Path I estaba recibiendo el mismo error. Vishrant tenía razón al afirmar eso. representa el directorio actual.
Si necesita más información sobre las opciones de Java, ingrese java -?
o java -help
creo que las opciones no son opcionales.
Investigué un poco más y encontré un sitio web que detalla CLASSPATH
. El CLASSPATH
debe establecer como una variable de entorno; al directorio actual <.>. Puede configurarlo desde la línea de comando en Windows:
// Set CLASSPATH to the current directory ''.''
prompt> set CLASSPATH=.
Cuando agrega una nueva configuración de entorno, debe reiniciar antes de habilitar la variable. Pero desde el símbolo del sistema puede configurarlo. También se puede configurar como mencioné al principio. Para obtener más información, y si usa un SO diferente, verifique: Variables de entorno .
Tuve un problema similar al ejecutar Java en win10
en lugar de
$ java ./hello
Error: Could not find or load main class ..hello
correr
$ java hello
Hello, World
Una razón para este error podría ser
No se pudo encontrar o cargar la clase principal
<class name>
Tal vez use su nombre de clase como un nombre diferente y guarde el nombre de la clase con otro nombre. Puede guardar un nombre de archivo de origen java por otro nombre que no sea el nombre de clase. Por ejemplo:
class A{
public static void main(String args[]) {
System.out.println("Hello world");
}
}
puedes guardar como Hello.java
pero,
Para compilar: javac Hello.java
Esto generará automáticamente el archivo A.class en la misma ubicación.
Ahora para ejecutar: java A
enfrenta el mismo problema resuelto siguiendo estos pasos
- vaya al directorio que contiene el paquete ''org.tij.exercises'' (por ejemplo: en eclipse puede ser su carpeta src)
- usa
java org.tij.exercises.HelloWorld