为什么部署后会出现noclassdeffounderror?

5t7ly7z5  于 2021-06-30  发布在  Java
关注(0)|答案(4)|浏览(436)

在部署jar并对某个类文件进行更改之后,我得到了noclassdeffounderror。当我通过7zip解压jar文件时,我能够看到jar中的类文件。
我还反编译了.class文件以查找任何错误,但没有得到任何结果。
在部署时,我只是将.class文件从eclipse工作空间拖到一个预先存在的jar文件中。这有关系吗?
编译jar文件的jdk版本是否重要,因为我运行的是eclipse中的jre1.7,但我的部署环境是jre1.6?

knpiaxh1

knpiaxh11#

当我在jdk1.6中编译代码时,这非常有效。两个版本中的java.security.secureclassloader都发生了更改。所以我想我会出错。

1u4esq0p

1u4esq0p2#

在我看来,问题是添加到jar的类是在不同版本的java下编译的。我猜您已经在1.7下编译了,12c运行的是1.7,而11g运行的是1.6。在1.6中编译类并将其添加到jar中,或者在1.7中重新编译jar,并确保您运行的环境具有1.7或更高版本。

brgchamk

brgchamk3#

noclassdeffounderror表示该类在运行时不可用。确保在类路径中有它,或者静态初始值设定项(如果存在)没有中断。对于后者,您将在stacktrace下面的某个地方看到ExceptionInInitializeError。
不太确定jdk版本是否重要。

bd1hkmkf

bd1hkmkf4#

在部署jar并对某个类文件进行更改之后,我得到了noclassdeffounderror。
这是由于存在代码所依赖的类文件,并且该类文件在编译时存在,但在运行时找不到(请参阅此答案)。
在部署时,我只是将.class文件从eclipse工作空间拖到一个预先存在的jar文件中。这有关系吗?
是的,这很重要。确保将类文件放回正确的包文件夹中。例如,包中的类 com.foo 必须在文件夹中 com/foo 在jar文件中。当您将更改后的版本拖到jar文件中时,它可能会落在其他地方。
编译jar文件的jdk版本是否重要,因为我运行的是eclipse中的jre1.7,但我的部署环境是jre1.6?
jar文件本身只是一个zip文件,所以不管您使用哪个版本的java压缩jar文件的内容。
但是,如果您从现有jar文件编译了一个类,那么使用哪个版本的java来编译jar文件中的其他类是很重要的,因为您可能会导致该类与其伴随类不兼容。

相关问题