繁体   English   中英

部署后为什么会出现noclassdeffounderror?

[英]why am i getting the noclassdeffounderror after deploying?

在将jar更改部署到某个类文件后,我收到noclassdeffounderror。 通过7zip提取jar文件时,我能够在jar中看到类文件。

我还对.class文件进行了反编译,以查找任何错误,但未得到任何结果。

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

因为我在Eclipse的jre 1.7上运行但我的部署环境是jre 1.6,因此在其中编译jar文件的jdk版本是否有意义?

我心中的问题是,添加到jar中的类是在不同版本的Java下编译的。 我猜您编译为1.7,而12c运行1.7,而11g运行1.6。 要么在1.6中编译该类,然后将其添加到jar中,要么在1.7中重新编译该jar,并确保您所运行的环境具有1.7或更高版本。

NoClassDefFoundError指出该类在运行时不可用。 确保将它放在类路径中,或者静态初始化程序(如果存在)没有损坏。 对于以后的版本,您将在堆栈跟踪下面的某个位置看到ExceptionInInitializerError。

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

在将jar更改部署到某个类文件后,我收到noclassdeffounderror。

这是由代码所依赖的类文件引起的,并且该类文件在编译时存在,但在运行时未找到( 请参见此答案 )。

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

是的,这很重要。 确保将类文件放回正确的包文件夹中。 例如,包com.foo的类必须位于jar文件内的com/foo文件夹中。 当您将更改后的版本拖到jar文件中时,它有可能落在其他地方。

因为我在Eclipse的jre 1.7上运行但我的部署环境是jre 1.6,因此在其中编译jar文件的jdk版本是否有意义?

jar文件本身只是一个zip文件,所以不,您使用哪个Java版本压缩jar文件的内容都没有关系。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM