JRE 1.7 - versión de java - devuelve: java/lang/NoClassDefFoundError: java/lang/Object

Al ejecutar cualquier aplicación java, o simplemente 'java', el jvm falla:

Se produjo un error durante la inicialización de la VM java/lang/NoClassDefFoundError: java/lang/Object

Aquí hay una lista de respuestas equivocadas:

  1. El directorio principal de Java correcto, incluyendo el directorio /bin, está en el PATH global

  2. JAVA_HOME está configurado correctamente

  3. La ejecución del comando java -fullversion funciona

     $ java -fullversion
    
     ./java versión completa "1.7.0_05-b05"
  4. Los enlaces simbólicos en /usr/java apuntan todos a la instalación correcta de java

  5. No instalé ningún 'default' java cuando creé el sistema

  6. El error de java -version falla... el mismo error que el anterior

  7. Ejecutar los comandos desde la estructura de directorios de la instalación de java tampoco funciona

  8. Se trata de un java de 64 bits para una instalación de 64 bits

¿Alguna idea?

Idioma: todos: ninguno -->

Este problema proviene de una instalación incorrecta de Java.

Posibilidad 1

NOTA: Este escenario sólo se aplica a Java 8 y anteriores. A partir de Java 9, el JRE está estructurado de forma diferente. rt.jar y sus amigos ya no existen, y Pack200 ya no se utiliza.

La biblioteca estándar de Java está contenida en varios JARs, como rt.jar, deploy.jar, jsse.jar, etc. Cuando se empaqueta el JRE, estos archivos JAR críticos se comprimen con Pack200 y se almacenan como rt.pack, deploy.pack, jsse.pack, etc. Se supone que el instalador de Java los descomprime. Si está experimentando este error, aparentemente eso no sucedió.

Debe ejecutar manualmente unpack200 en todos los archivos .pack de las carpetas lib/ y lib/ext/ del JRE.

Windows

Para desempaquetar un archivo .pack (por ejemplo rt.pack), ejecute

"%JAVA_HOME%\bin\unpack200" -r -v rt.pack rt.jar

Para desempaquetar recursivamente todos los archivos .pack, desde la raíz del JRE ejecute:

for /r %f in (*.pack) do "%JAVA_HOME%\bin\unpack200.exe" -r -q "%f" "%~pf%~nf.jar"

*nix

Para descomprimir un archivo .pack (por ejemplo rt.pack), ejecute

/usr/bin/unpack200 -r -v rt.pack rt.jar

Para desempaquetar recursivamente todos los archivos .pack, desde la raíz del JRE ejecute:

find -iname "*.pack" -exec sh -c "/usr/bin/unpack200 -r -q {} \$(echo {} | sed 's/\(.*\.\)pack/\1jar/')" \;

Posibilidad 2

Has instalado mal Java de alguna otra manera. Quizás instalaste sin derechos de administrador, o intentaste simplemente extraer los archivos del instalador. Inténtalo de nuevo con el instalador y/o con más privilegios. O, si no quiere utilizar el instalador, utilice el paquete Java .tar.gz en su lugar.

Comentarios (11)

Parece que para una arquitectura de 64 bits hay que instalar tanto la versión de 32 bits como la de 64 bits de jre (los archivos independientes de la arquitectura como rt.jar se distribuyen sólo en la versión de 32 bits).

Recuerda entonces prestar atención a incluir el ejecutable java correcto en la variable de entorno global PATH.

Comentarios (7)

Otra respuesta podría ser utilizar el archivo tar.gz en su lugar en el caso de Linux. Parece que hay algo así también para la plataforma solaris. De esta manera todos los archivos ya estarán en el formato esperado y no habrá ningún problema de desempaquetado.

Comentarios (2)