[英]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.