2010-02-11 56 views
1

在Solaris 10上,我使用的是JDK 1.5.0_22,并且当我在JDK/bin目录中运行任何JDK可执行文件(javac,native2ascii,javadoc等) tools.jar跑,我得到这个错误(有或没有参数运行):javac(和其他jdk可执行文件)产生NoClassDefFoundError

Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/tools/javac/Main

JRE可执行程序不需要tools.jar做工精细(Java中,密钥工具等)的bin目录。

是的,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添加到任何JDK/bin可执行文件,如javac,javadoc,native2ascii,它们运行。否则,他们不会。

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

回答

0

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

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

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

+1

我从来没有将JAVA_HOME设置为bin文件夹。我有其他的Solaris系统根本没有设置JAVA_HOME,而javac,native2ascii等等都可以工作。 – JavaHoss 2010-02-11 18:57:55