Saltar al contenido

¿Cómo resuelvo ClassNotFoundException?

Solución:

Un classpath es una lista de ubicaciones desde las que cargar clases.

Estas ‘ubicaciones’ pueden ser directorios o archivos jar.

Para los directorios, la JVM seguirá un patrón esperado para cargar una clase. Si tengo el directorio C: / myproject / classes en mi classpath, e intento cargar una clase com.mycompany.Foo, buscará en el directorio de clases un directorio llamado com, luego debajo de eso un directorio llamado mi empresa, y finalmente buscará un archivo llamado Foo.class en ese directorio.

En la segunda instancia, para archivos jar, buscará el archivo jar para esa clase. Un archivo jar es en realidad solo una colección comprimida de directorios como el anterior. Si descomprime un archivo jar, obtendrá un montón de directorios y archivos de clases siguiendo el patrón anterior.

Entonces, la JVM atraviesa un classpath de principio a fin buscando la definición de la clase cuando intenta cargar la definición de la clase. Por ejemplo, en el classpath:

C: / myproject / classes; C: /myproject/lib/stuff.jar; C: /myproject/lib/otherstuff.jar

La JVM intentará buscar en el directorio clases primero, luego en cosas.jar y finalmente en otherstuff.jar.

Cuando obtiene una ClassNotFoundException, significa que la JVM ha atravesado toda la ruta de clases y no ha encontrado la clase a la que ha intentado hacer referencia. La solución, como ocurre tan a menudo en el mundo de Java, es comprobar su classpath.

Defina una ruta de clase en la línea de comando diciendo java -cp y luego tu classpath. En un IDE como Eclipse, tendrá una opción de menú para especificar su ruta de clases.

Tu classpath está roto (que es un muy problema común en el mundo Java).

Dependiendo de cómo inicie su aplicación, debe revisar el argumento para -cp, su entrada de Class-Path en MANIFEST.MF o el diseño de su disco.

Esta es la mejor solución que encontré hasta ahora.

Supongamos que tenemos un paquete llamado org.mypackage que contiene las clases:

  • HelloWorld (clase principal)
  • SupportClass
  • UtilClass

y los archivos que definen este paquete se almacenan físicamente en el directorio D:myprogram (en Windows) o /home/user/myprogram (en Linux).

La estructura del archivo se verá así:
ingrese la descripción de la imagen aquí

Cuando invocamos Java, especificamos el nombre de la aplicación a ejecutar: org.mypackage.HelloWorld. Sin embargo, también debemos decirle a Java dónde buscar los archivos y directorios que definen nuestro paquete. Entonces, para lanzar el programa, tenemos que usar el siguiente comando:
ingrese la descripción de la imagen aquí

NOTA: Tienes que ejecutar lo anterior java comando sin importar cuál sea su ubicación actual. Pero este no es el caso de javac. Para compilar, incluso puede ir directamente al directorio donde tiene su .java archivos y ejecutar directamente javac ClassName.java.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *