为什么我在部署后得到了noclassdeffounderror?

时间:2015-01-14 20:54:04

标签: java eclipse jar java-ee-6 noclassdeffounderror

在部署jar并更改某个类文件后,我得到了noclassdeffounderror。 当我通过7zip解压缩jar文件时,我能够在jar中看到类文件。

我还解析了.class文件以找到任何错误但没有得到任何东西。

部署时我只是将.class文件从eclipse工作空间拖到预先存在的jar文件中。这有关系吗?

jar文件编译的jdk版本是否重要,因为我在eclipse中运行jre 1.7但我的部署环境是jre 1.6?

4 个答案:

答案 0 :(得分:0)

我的想法是,添加到jar的类已经在不同版本的Java下编译。我猜你已经编译在1.7和12c运行1.7,而11g运行1.6。在1.6中编译类并将其添加到jar中或在1.7中重新编译jar并确保您运行的环境具有1.7或更高版本。

答案 1 :(得分:0)

NoClassDefFoundError指出该类在运行时期间不可用。确保在类路径中有它,或者静态初始化程序(如果存在)没有中断。对于后者,您将在下面的堆栈跟踪中看到ExceptionInInitializerError。

不太确定jdk版本是否重要。

答案 2 :(得分:0)

  

在部署带有更改的jar后,我得到了noclassdeffounderror   到某个班级档案。

这是因为当您的代码所依赖的类文件时,它在编译时出现但在运行时(see this answer)找不到。

  

部署时我只是从eclipse工作中拖出.class文件   将空间转换为预先存在的jar文件。这有关系吗?

是的,这很重要。务必将类文件放回正确的包文件夹中。例如,包com.foo中的类必须位于jar文件中的文件夹com/foo中。当你把它改成jar文件时,你的改进版本可能会落在其他地方。

  

编译jar文件的jdk版本是否重要,因为   我在eclipse中运行jre 1.7,但我的部署环境是   jre 1.6?

jar文件本身只是一个zip文件,所以不,用于压缩jar文件内容的Java版本并不重要。

但是,如果您从现有的jar文件中重新编译了一个类,那么确实使用哪个版本的Java来编译jar文件中的其他类,因为您可能导致该类与其伴随类不兼容。

答案 3 :(得分:-2)

当我在jdk 1.6中编译代码时,这非常有效。两个版本中都更改了java.security.SecureClassLoader。这就是为什么我认为我得到了错误。