¿No se pudo encontrar o cargar Java de la clase principal? ¡Aquí le mostramos cómo solucionarlo!
Si sigue recibiendo el error de clase principal no encontrada en su proyecto Java sin razón aparente, no se preocupe, no está solo.
Como uno de los errores más imprevisibles y espontáneos, gracias a la tendencia de JVM (Java Virtual Machine) de ceñirse a una ruta de clases predeterminada, el problema de 'clase principal no encontrada' es algo que persigue tanto a los aficionados como a los profesionales.
Pero este problema es menos intimidante de lo que parece. Siga leyendo para descubrir cómo puede deshacerse de este error de una vez por todas.
¿Por qué no se encontró la clase principal?
Antes de intentar comprender cómo y por qué JVM no pudo encontrar la clase principal, debemos comprender el concepto de Classpath en Java.
¿Qué es Classpath?
La ruta de clases es la ruta del archivo en la que el entorno de ejecución de Java busca clases y otros archivos de recursos. Se puede configurar usando la opción -classpath al ejecutar un programa o configurando la variable de entorno CLASSPATH del sistema.
Como sugiere el nombre, es simplemente una ruta de archivo donde los archivos .class se pueden encontrar en un paquete o directorio JDK.
Cuando la JVM no puede ubicar la clase principal, a menudo es porque está buscando los archivos .class correspondientes en la ruta de clase incorrecta. Por supuesto, la forma de rectificar este problema es especificar manualmente la ruta de clases utilizando paquetes o especificando la ruta de clases.
En este punto, si desea actualizar su memoria de las clases de Java, consulte nuestra guía para crear clases en Java .
Usar paquetes
Creemos una clase llamada Prueba . Colóquelo en un paquete llamado testPackage . Los paquetes se utilizan en Java para agrupar clases similares o proporcionar un espacio de nombres único para las clases.
En este sencillo ejemplo, el uso de un paquete le ayudará a visualizar cómo funciona la ruta de clases de Java. En su aplicación de administrador de archivos, un paquete se representa como una carpeta independiente.
package testPackage;
public class Test {
public static void main(String args[]) {
System.out.println("File successfully found!");
}
}
Ahora, abra una nueva terminal y asegúrese de que su directorio de trabajo sea el mismo que el que contiene la carpeta del paquete. Puede cambiar el directorio de trabajo utilizando el comando cd en cualquier sistema operativo.
Compile Test.java ejecutando el siguiente comando:
package testPackage;
javac testPackage/Test.java
Esto guardará el archivo binario compilado (el archivo .class) en testPackage.
Para ejecutar la clase compilada, debe escribir el nombre de la clase completamente calificado en la línea de comando. El nombre completo de una clase Java se refiere a su nombre con el prefijo del nombre del paquete. En este caso, esto debería verse así:
java testPackage.Test
Esta forma de llamar a los archivos de clase también asegura que pueda llamar a ejecutables de diferentes paquetes desde el mismo directorio de trabajo. Todo lo que tiene que hacer es modificar el nombre de la clase completamente calificado.
En implementaciones más avanzadas, le recomendamos que cree subcarpetas separadas para sus clases y archivos fuente para administrar mejor los archivos dentro del paquete.
Especificación manual de classpath
La forma recomendada de administrar sus archivos java es crear directorios separados para los archivos de origen y las clases. Si está trabajando en un proyecto, es probable que ya lo esté haciendo.
Convencionalmente, el directorio con archivos fuente se etiqueta como src y el que tiene archivos .class se etiqueta como clases. Esta es también una forma de garantizar que la probabilidad de que JVM no encuentre la clase principal se reduzca significativamente, debido al directorio estructurado correctamente.
Si usamos este método, así es como se verá la estructura del directorio antes de compilar:
|---myFolder
| |---src
| |---testPackage
| |---Test.java
|
| |---classes
Cada sangría en la ilustración anterior corresponde a un nivel de la jerarquía de archivos que debe seguir su proyecto.
Para compilar esto, asegúrese de que su directorio de trabajo sea myFolder. Ahora, escriba el siguiente comando:
javac -d classes src/testPackage/Test.java
El ejecutable .class debe guardarse en myFolder / classes / testPackage . En consecuencia, la estructura del directorio de archivos se parece a esto:
|---myFolder
| |---src
| |---testPackage
| |---Test.java
|
| |---classes
| |---testPackage
| |---Test.class
Para ejecutar el archivo .class , ejecute el comando Java con el nombre de clase completo y especifique la ruta de clase local. Cada ruta se declara relativa al directorio de trabajo, que en este caso es myFolder.
java -classpath classes testPackage
Ejecutar este comando debería darle el resultado deseado. Pero, ¿por qué es necesaria tanta reorganización para solucionar un simple error?
La importancia de organizar archivos en Java
La misma razón por la que se lanza 'No se pudo encontrar o cargar la clase principal' es porque JVM no pudo encontrar dónde se estaban almacenando sus archivos .class .
La forma más fácil de resolver este error es controlar dónde se almacenan los archivos .class y decirle explícitamente a JVM que busque allí. Esto es posible organizando sus archivos fuente y ejecutables por separado y controlando todo desde un directorio de trabajo.
A medida que comience a agregar construcciones como la herencia a su proyecto, la complejidad del sistema de archivos aumentará. En tales proyectos o incluso en aquellos en los que se requiere el uso de archivos JAR o bibliotecas personalizadas, la simple práctica de segregar y administrar archivos puede ahorrarle innumerables horas de resolución de problemas y depuración.
Para leer más sobre cómo funciona classpath en Java y las numerosas cosas que puede controlar cuando se trata de ejecutar su código, también puede echar un vistazo a la referencia detallada y fácil de usar de Oracle.