在部署jar并更改某个类文件后,我得到了noclassdeffounderror。 当我通过7zip解压缩jar文件时,我能够在jar中看到类文件。
我还解析了.class文件以找到任何错误但没有得到任何东西。
部署时我只是将.class文件从eclipse工作空间拖到预先存在的jar文件中。这有关系吗?
jar文件编译的jdk版本是否重要,因为我在eclipse中运行jre 1.7但我的部署环境是jre 1.6?
答案 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。这就是为什么我认为我得到了错误。