5.7.14

NoClassDefFoundError cuando la clase sí que se encuentra

La documentación oficial de la clase java.lang.NoClassDefFoundError nos dice que esta excepción se lanza cuando la máquina virtual intenta cargar la definición de una clase, pero esta definición no se encuentra. Esto indica que cuando el programa se compiló, la clase estaba presente, pero en la ejecución ya no está.

Si al ejecutar una aplicación nos salta esta excepción, al leer esto enseguida pensamos en problemas de classpath o de empaquetamiento, y nos ponemos como locos a comprobar si el jar está bien construido, si están todos los jars, si tenemos bien definido el classpath, etc. Pero a veces, por mucho que busquemos no encontramos ningún error ahí. Es más, es especialmente desconcertante cuando la clase supuestamente desaparecida, está en el mismo jar que la clase que la busca y no la encuentra.

¿Qué puede estar ocurriendo? Bien, hay un motivo por el que la máquina virtual puede lanzar una java.lang.NoClassDefFoundError, aunque encuentre la clase: durante la inicialización estática de la misma. Imaginemos la siguiente clase:


public class SomeClass {
    
    public static final int SOME_CONSTANT = precalculateSomeValue();
    
    static {
        initializeSomething();
    }
 
    // (...)   
 
}

Si durante la ejecución del método precalculateSomeValue() o de initializeSomething(), se lanzara una excepción, la clase que hace referencia a SomeClass (y que ha «disparado» la inicialización), lanzará una NoClassDefFoundError. Fijaos que en este caso, la clase sí que ha sido localizada correctamente por la máquina virtual. El problema no es que no la haya encontrado, sino que no la ha podido inicializar.

3 comentarios:

  1. Hola Alfonso.
    Gracias por la info sobre como poner una página estática como entrada principal de un sitio. Me ha sido muy útil tras unos pocos intentos.
    Visité tu blog de "Las memorias de klatu" y claro, ahora me gustaría saber cómo poner "opiniones" en una página estática
    ¿es mucho pedir:?
    Saludos y gracias de nuevo

    ResponderEliminar
    Respuestas
    1. Hola Coco. Es muy fácil. Una página estática se comporta como un post cualquiera, y puede tener comentarios. Lo único que hay que hacer es habilitarlos para esa página.

      Eliminar
    2. Hola Alfonso, si, es como dices. Tenía puestas las orejeras de pagina estática y no había pensado en la posibilidad de combinarlas. El resultado final está en: http://elcrimendefani.blogspot.com.es/

      Por cierto, he notado que no tienes opiniones y me parece extraño; a mi me ocurría lo mismo y cambié la configuración para que los comentarios no fueran "moderados", y ya aparecen. ¿Fallo de blogger? Quien sabe. Saludos.

      Eliminar