No se pudo encontrar o cargar el error de clase principal

1. Introducción

Ocasionalmente, cuando ejecutamos un programa Java, es posible que veamos "No se pudo encontrar o cargar la clase principal". Es fácil adivinar la razón: la JVM no pudo encontrar la clase principal y dio este error. ¿Pero por qué no podía hacerlo?

En este tutorial, discutiremos las posibles razones por las que no se pudo encontrar la clase principal. Además, veremos cómo solucionarlos.

2. Programa de muestra

Comenzaremos con un programa HelloWorld :

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello world..!!!"); } }

Ahora, compilémoslo:

$ javac HelloWorld.java

Aquí, el compilador generará un archivo .class para nuestro programa. Este archivo .class se generará en el mismo directorio. El archivo .class tendrá el mismo nombre que el nombre de la clase dado en el programa Java. Este archivo .class es ejecutable.

En las siguientes secciones, ejecutaremos este archivo .class e intentaremos comprender las posibles razones del error "No se pudo encontrar o cargar la clase principal".

3. Nombre de clase incorrecto

Para ejecutar un archivo .class generado por el compilador de Java, podemos usar el siguiente comando:

java 

Ahora, ejecutemos nuestro programa:

$ java helloworld Error: Could not find or load main class helloworld

Sí, falló con el error "No se pudo encontrar o cargar la clase principal helloworld".

Como se discutió anteriormente, el compilador generará el archivo .class con el mismo nombre exacto que se le dio a la clase Java en el programa . Entonces, en nuestro caso, la clase principal tendrá el nombre HelloWorld , no helloworld .

Intentémoslo una vez más con la carcasa correcta:

$ java HelloWorld Hello world..!!!

Esta vez funcionó con éxito.

3.1. Extensión de archivo

Para compilar un programa Java, debemos proporcionar el nombre del archivo con su extensión (. Java ):

$ javac HelloWorld.java

Pero para ejecutar un. class , necesitamos proporcionar el nombre de la clase, no el nombre del archivo. Por lo tanto, no es necesario proporcionar la extensión .class :

$ java HelloWorld.class Error: Could not find or load main class HelloWorld.class

Entonces, nuevamente, ejecutemos nuestro programa usando el nombre de clase correcto:

$ java HelloWorld Hello world..!!!

4. Nombres de paquetes de Java

En Java, mantenemos juntas clases similares en lo que llamamos paquete .

Vamos a mover HelloWorld clase en la com.baeldung paquete:

package com.baeldung; public class HelloWorld { public static void main(String[] args) { System.out.println("Hello world..!!!"); } }

Ahora, compilemos y ejecutemos el programa HelloWorld actualizado como antes:

$ java HelloWorld Error: Could not find or load main class HelloWorld

¡Pero nuevamente nos aparece el error "No se pudo encontrar o cargar la clase principal HelloWorld"!

Tratemos de entender qué nos perdimos aquí.

Para ejecutar una clase Java que está en un paquete, debemos proporcionar su nombre completo . Entonces, en nuestro caso, el nombre completo de HelloWorld es com.baeldung.HelloWorld .

Ahora, cuando creamos el paquete com.baeldung , en realidad creamos una estructura de carpetas como:

com/baeldung/HelloWorld.java

Primero, intentemos ejecutar nuestro programa desde el directorio com / baeldung :

$ java com.baeldung.HelloWorld Error: Could not find or load main class com.baeldung.HelloWorld

Aún así, no podemos ejecutar nuestro programa.

Aquí, cuando especificamos el nombre de clase completo com.baeldung.HelloWorld , Java intentó encontrar el archivo HelloWorld.class en com / baeldung , en el directorio desde donde estábamos ejecutando el programa.

Como ya estábamos dentro de com / baeldung , Java no pudo encontrar y ejecutar el programa HelloWorld .

Ahora, regresemos a la carpeta principal y ejecútelo:

$ java com.baeldung.HelloWorld Hello world..!!!

Sí, nuevamente podemos decir "Hola" al mundo.

5. Classpath no válido

Antes de seguir adelante, primero entendamos qué es la ruta de clases: es el conjunto de clases disponibles para nuestra JVM que se está ejecutando actualmente.

Usamos la variable classpath para decirle a la JVM dónde encontrar los archivos .class en el sistema de archivos.

Mientras ejecutamos un programa, podemos proporcionar la ruta de clases usando la opción -classpath . ejemplo:

java -classpath /my_programs/compiled_classes HelloWorld

Aquí, Java buscará el archivo HelloWorld.class en la carpeta / my_programs / compiled_classes , una carpeta cuyo nombre acabamos de inventar. De forma predeterminada, la variable classpath se establece en ".", Es decir, el directorio actual.

En la sección anterior, cambiamos nuestro directorio para ejecutar nuestro programa. Pero, ¿y si queremos ejecutarlo desde otra carpeta? Ahí es cuando la variable classpath nos ayuda.

Para ejecutar nuestro programa desde el directorio es com / baeldung , simplemente podemos indicar que nuestra ruta de clases está dos directorios arriba, uno para cada parte del paquete:

$ java -claspath ../../ com.baeldung.HelloWorld Hello world..!!!

Aquí, ".." representa el directorio principal. En nuestro caso, “../../” representa la parte superior de nuestra jerarquía de paquetes.

6. Conclusión

En este tutorial, aprendimos las posibles razones del error "No se pudo encontrar o cargar la clase principal".

Luego, por supuesto, también aprendimos cómo solucionar este error.