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:
O directório home Java correcto, incluindo o directório /bin, está no PATH global
JAVA_HOME está configurado correctamente
Execução dos trabalhos de comando java -fullversion
$ java -fullversion
./java versão completa "1.7.0_05-b05"
As ligações simbólicas em /usr/java apontam todas para a instalação correcta do java
Não instalei nenhum ' por defeito' java quando criei o sistema
A 'jav -versão' falha...o mesmo erro que acima
A emissão dos comandos a partir da estrutura do directório da instalação java também não funciona
Isto é 64-bit java para um 64-bit
Alguma ideia?
Este problema deriva de uma instalação Java inadequada.
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.
Para desembalar um ficheiro .pack' (por exemplo
rt.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"
Para desembalar um ficheiro .pack' (por exemplo
rt.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/')" \;
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.
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.
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.