javac(和其他jdk可执行文件)产生NoClassDefFoundError

时间:2010-02-11 18:37:13

标签: solaris java

在Solaris 10上,我正在使用JDK 1.5.0_22,当我在JDK / bin中运行任何JDK可执行文件(javacnative2asciijavadoc等)时需要tools.jar运行的目录,我收到此错误(使用和不使用参数运行):

  

线程“main”中的异常java.lang.NoClassDefFoundError:   COM /太阳/工具/ javac的/主

bin目录中的JRE可执行文件,不需要tools.jar正常工作(java,keytool等)。

是的,tools.jar位于JDK / lib目录中,权限正常并且没有损坏 - 我能够查看tools.jar的内容并将其解压缩。

我尝试设置JAVA_HOME,并将JDK / bin目录添加到PATH - 设置/取消设置这些环境变量没有区别。我仍然得到同样的错误。

这是我发现的唯一一个摆脱NoClassDefFoundError并允许运行JDK / bin可执行文件的事情(下面的cmd是从JDK / bin目录运行的):

./native2ascii -J-Xbootclasspath/a:../lib/tools.jar

因此,如果我将-J-Xbootclasspath/a:../lib/tools.jar添加到javacjavadocnative2ascii等任何JDK / bin可执行文件中,它们就会运行。否则,他们没有。

有关如何修复的任何想法?所有JDK / bin可执行文件在我拥有的其他Solaris 10系统上运行正常,并且它们都没有在PATH上设置任何JAVA_HOME vars或JDK / bin。

1 个答案:

答案 0 :(得分:0)

如果Java虚拟机或ClassLoader实例尝试加载类的定义(作为普通方法调用的一部分或作为使用新表达式创建新实例的一部分)并且没有定义,则抛出此NoClassDefFoundError可以找到班级。

当编译当前正在执行的类时,搜索的类定义存在,但无法再找到该定义。

不应将JAVA_HOME设置为BIN文件夹。它应该是这样的一级:JDK_HOME = C:\ Program Files \ Java \ jdk1.6.0_18