当运行任何java应用程序,或只是运行'java'时,jvm会失败。
虚拟机初始化时发生错误 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.我在创建系统时没有安装任何'默认'java
6.java -version
失败了...和上面的错误一样
7.从java安装的目录结构下发出命令也不工作
8.这是一个64位的java,用于64位的
有什么想法吗?
这个问题源于不正确的Java安装。
注意:这种情况只适用于Java 8及以前的版本。从Java 9开始,JRE的结构不同。rt.jar和朋友不再存在,Pack200也不再使用。
Java标准库包含在各种JAR中,如rt.jar
、deploy.jar
、jsse.jar
等。当JRE被打包时,这些关键的JAR文件被Pack200压缩并存储为rt.pack
, deploy.pack
, jsse.pack
等。Java安装程序应该将它们解压。如果你遇到了这个错误,显然这没有发生。
你需要对JRE的lib/
和lib/ext/
文件夹中的所有.pack
文件手动运行[unpack200
](https://docs.oracle.com/javase/8/docs/technotes/tools/unix/unpack200.html)。
要解压一个.pack
文件(例如rt.pack
),请运行。
"%JAVA_HOME%\bin\unpack200" -r -v rt.pack rt.jar
递归解压所有.pack
文件,从JRE根目录运行。
for /r %f in (*.pack) do "%JAVA_HOME%\bin\unpack200.exe" -r -q "%f" "%~pf%~nf.jar"
要解开一个.pack
文件(例如rt.pack
),请运行。
/usr/bin/unpack200 -r -v rt.pack rt.jar
递归解压所有.pack
文件,从JRE根目录运行。
find -iname "*.pack" -exec sh -c "/usr/bin/unpack200 -r -q {} \$(echo {} | sed 's/\(.*\.\)pack/\1jar/')" \;
你以其他方式错误地安装了 Java。也许你在没有管理员权限的情况下安装,或者试图简单地从安装程序中提取文件。再试试用安装程序和/或更多的权限。或者,如果你不想使用安装程序,使用.tar.gz
Java包代替。