JRE 1.7 - versão java - devoluções: java/lang/NoClassDefFoundFoundError: java/lang/Object

Ao executar qualquer aplicação java, ou apenas 'java' o jvm falha:

Erro ocorrido durante a inicialização do VM java/lang/NoClassDefFoundFoundError: java/lang/Object

Aqui está uma lista de respostas erradas:

  1. O directório home Java correcto, incluindo o directório /bin, está no PATH global

  2. JAVA_HOME está configurado correctamente

  3. Execução dos trabalhos de comando java -fullversion

     $ java -fullversion
    
     ./java versão completa "1.7.0_05-b05"
  4. As ligações simbólicas em /usr/java apontam todas para a instalação correcta do java

  5. Não instalei nenhum ' por defeito' java quando criei o sistema

  6. A 'jav -versão' falha...o mesmo erro que acima

  7. A emissão dos comandos a partir da estrutura do directório da instalação java também não funciona

  8. Isto é 64-bit java para um 64-bit

Alguma ideia?

Este problema deriva de uma instalação Java inadequada.

Possibilidade 1

NOTE: Este cenário só se aplica a Java 8 e anteriores. Começando com Java 9, o JRE está estruturado de forma diferente. rt.jar e amigos já não existem, e Pack200 já não é utilizado.

A biblioteca padrão Java está contida em vários JARs, tais como rt.jar, deploy.jar, jsse.jar, etc. Quando o JRE é empacotado, estes ficheiros JAR críticos são comprimidos com Pack200 e armazenados como rt.pack, deploy.pack, jsse.pack, etc. O instalador Java deve descomprimi-los. Se estiver a experimentar este erro, aparentemente isso não't aconteceu.

É necessário executar manualmente unpack200 em todos os ficheiros .pack nas pastas lib/ e lib/ext/ do JRE's.

Janelas

Para desembalar um ficheiro .pack' (por exemplort.pack'), correr:

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

Para desempacotar recursivamente todos os ficheiros `.pack', a partir do root run do JRE:

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

*nix

Para desembalar um ficheiro .pack' (por exemplort.pack'), correr:

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

Para desempacotar recursivamente todos os ficheiros `.pack', a partir do root run do JRE:

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

Possibilidade 2

Instalou mal Java de outra forma. Talvez tenha instalado sem direitos de administrador, ou tenha tentado simplesmente extrair ficheiros do instalador. Tente novamente com o instalador e/ou mais privilégios. Ou, se não quiser utilizar o instalador, utilize o pacote .tar.gz Java.

Comentários (11)

Parece que para uma arquitectura de 64 bits é necessário instalar tanto a versão de 32 bits como a versão de 64 bits do jre (os ficheiros independentes da arquitectura como rt.jar são distribuídos apenas na versão de 32 bits).

Lembre-se então de prestar atenção para incluir o executável java correcto na variável de ambiente global PATH.

Comentários (7)

Outra resposta poderia ser utilizar o ficheiro tar.gz no caso do Linux. Parece haver algo do género também para a plataforma solaris. Desta forma, todos os ficheiros já estarão no formato esperado e não haverá problemas de desempacotamento' não haverá problemas de desempacotamento.

Comentários (2)