JRE 1.7 - java-versjon - returnerer: java/lang/NoClassDefFoundError: java/lang/Object

Når du kjører en java-applikasjon, eller bare 'java', mislykkes jvm:

Det oppstod en feil under initialisering av VM java/lang/NoClassDefFoundError: java/lang/Object

Her er en liste over gale svar:

  1. Den riktige Java-hjemmekatalogen, inkludert /bin-katalogen, er på den globale PATH-en.

  2. JAVA_HOME er riktig angitt

  3. Utførelse av kommandoen java -fullversion fungerer.

     $ java -fullversion
    
     ./java fullversjon "1.7.0_05-b05"
  4. De symbolske lenkene i /usr/java peker alle til riktig java-installasjon.

  5. Jeg installerte ingen 'standard' java da jeg opprettet systemet.

  6. java -version mislykkes ... samme feil som ovenfor.

  7. Å utføre kommandoene fra under katalogstrukturen til java-installasjonen fungerer heller ikke.

  8. Dette er 64-biters java for en 64-biters

Har du noen forslag?

Dette problemet skyldes en feilaktig Java-installasjon.

Mulighet 1

BEMERK: Dette scenariet gjelder bare for Java 8 og tidligere. Fra og med Java 9 er JRE strukturert på en annen måte. rt.jar og venner finnes ikke lenger, og Pack200 brukes ikke lenger.

Javas standardbibliotek finnes i ulike JAR-filer, for eksempel rt.jar, deploy.jar, jsse.jar osv. Når JRE pakkes, komprimeres disse kritiske JAR-filene med Pack200 og lagres som rt.pack, deploy.pack, jsse.pack osv. Det er meningen at Java-installasjonsprogrammet skal dekomprimere dem. Hvis du opplever denne feilen, har det tydeligvis ikke skjedd.

Du må kjøre unpack200 manuelt på alle .pack-filer i JRE's lib/ og lib/ext/ mapper.

Windows

For å pakke ut en .pack-fil (for eksempel rt.pack), kjør:

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

For å pakke ut alle .pack-filer rekursivt fra JRE-roten, kjør:

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

*nix

For å pakke ut en .pack-fil (for eksempel rt.pack), kjør:

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

For å pakke ut alle .pack-filer rekursivt fra JRE-roten, kjør:

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

Mulighet 2

Du har feilinstallert Java på en annen måte. Kanskje du installerte uten administratorrettigheter, eller prøvde å pakke ut filer fra installasjonsprogrammet. Prøv igjen med installasjonsprogrammet og/eller flere rettigheter. Eller, hvis du ikke vil bruke installasjonsprogrammet, kan du bruke .tar.gz Java-pakken i stedet.

Kommentarer (11)

Det ser ut til at for en 64-biters arkitektur må du installere både 32-bitersversjonen og 64-bitersversjonen av jre (arkitekturuavhengige filer som rt.jar distribueres bare i 32-bitersversjonen).

Husk da å være oppmerksom på å inkludere den riktige kjørbare java-filen i den globale PATH-miljøvariabelen.

Kommentarer (7)

Et annet svar kan være å bruke tar.gz-filen i stedet i Linux-tilfellet. Det ser ut til å finnes noe lignende også for Solaris-plattformen. På denne måten vil alle filene allerede være i det forventede formatet, og det vil ikke være noen utpakkingsproblemer.

Kommentarer (2)