JRE 1.7 - javaのバージョン - 戻り値: java/lang/NoClassDefFoundError: java/lang/Object

任意のjavaアプリケーション、または単に 'java'を実行すると、jvmが失敗します。

VMの初期化中にエラーが発生しました。 jgt;java/lang/NoClassDefFoundError: java/lang/Object

以下は、間違った答えのリストです。

1.正しいJavaのホームディレクトリ(/binディレクトリを含む)は、グローバルPATH上にあります。

2.JAVA_HOME が正しく設定されている

3.java -fullversionコマンドを実行すると動作する

    $ java -fullversion

    ./java フルバージョン "1.7.0_05-b05"

4.usr/javaにあるシンボリックリンクは、すべて正しいjavaのインストールを指しています。

5.システムの作成時に 'default'のjavaをインストールしていない。

6.java -version`が失敗する...上記と同じエラーが出る

7.javaがインストールされているディレクトリ構造の下からコマンドを発行しても、動作しません。

8.これは64ビットのJAVAで、64ビットの

何かアイデアはありませんか?

この問題は、不適切なJavaのインストールに起因しています。

可能性1

注意:**このシナリオは、Java 8以前にのみ適用されます。rt.jarなどは存在せず、Pack200も使用されていません。

Javaの標準ライブラリは、rt.jardeploy.jarjsse.jarなど、さまざまなJARに含まれています。JREのパッケージ化の際には、これらの重要なJARファイルはPack200で圧縮され、rt.pack, deploy.pack, jsse.pack などの名前で保存されます。Javaインストーラーはこれらを解凍することになっています。このエラーが発生している場合は、どうやらそれが行われなかったようです。

JRE'の lib/lib/ext/ フォルダーにあるすべての .pack ファイルに対して、手動で unpack200 を実行する必要があります。

Windows

1つの.packファイル(例えばrt.pack)を解凍するには、次のように実行します。

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

JREルートからすべての.packファイルを再帰的にアンパックするには、次のように実行します。

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

*nix

1つの.packファイル(例えばrt.pack)を解凍するには、次のように実行します。

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

JREルートからすべての.packファイルを再帰的にアンパックするには次のように実行します。

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

可能性 2

他の方法でJavaを誤ってインストールした。管理者権限を持たずにインストールしたか、インストーラーから単にファイルを抽出しようとしたのかもしれません。インストーラーやより多くの権限を使ってもう一度試してみてください。あるいは、インストーラを使いたくない場合は、代わりに .tar.gz 形式の Java パッケージを使ってください。

解説 (11)

64ビットのアーキテクチャでは、32ビット版と64ビット版のjreの両方をインストールする必要があるようです(rt.jarのようなアーキテクチャに依存しないファイルは32ビット版でのみ配布されています)。

その際、グローバルPATH環境変数に正しいjava実行ファイルを含めるように注意してください。

解説 (7)

また、Linuxの場合は、tar.gzファイルを代わりに使うという方法もあります。solarisプラットフォームでも同じようなものがあるようです。この方法だと、すべてのファイルが期待通りのフォーマットになっているので、解凍の際に問題が発生することはありません。

解説 (2)