我遇到了一个非常奇怪的错误(对我来说)。我们向项目的 pom 文件添加了新的依赖项。 jar 文件位于项目中(从存储库下载),我们可以看到所有所有类文件和源代码。
我们在程序中添加了一些代码来创建新 jar 文件中定义的一些类。代码编译没有错误,war 文件部署在网络服务器(websphere)中也没有问题。
但是在调试程序时,当我们尝试从新的 jar 文件创建第一个对象时,我们发现了 java.lang.NoClassDefFoundError
异常。
今天发现jar文件是用jdk 1.7编译的,而我们所有的项目都是用1.6 jdk编译的。 我在manifest文件中看到了用来编译jar文件的jdk。此信息正确吗? jar 文件和我的项目中使用的 jdks 之间的差异可能会导致问题?
我检查了类路径中是否存在 jar 文件定义,并且 websphere 服务器已重新启动多次。
堆栈跟踪:
Caused by: java.lang.ClassNotFoundException: cnaf.verificateurbiciban.ws.v1.VerificateurbicibanV1ServiceCnaf
at java.net.URLClassLoader.findClass(URLClassLoader.java:423)
at com.ibm.ws.bootstrap.ExtClassLoader.findClass(ExtClassLoader.java:191)
at java.lang.ClassLoader.loadClass(ClassLoader.java:660)
at com.ibm.ws.bootstrap.ExtClassLoader.loadClass(ExtClassLoader.java:111)
at java.lang.ClassLoader.loadClass(ClassLoader.java:626)
at com.ibm.ws.classloader.ProtectionClassLoader.loadClass(ProtectionClassLoader.java:62)
at com.ibm.ws.classloader.ProtectionClassLoader.loadClass(ProtectionClassLoader.java:58)
at com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:510)
at java.lang.ClassLoader.loadClass(ClassLoader.java:626)
at com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:542)
at java.lang.ClassLoader.loadClass(ClassLoader.java:626)
at com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:542)
at java.lang.ClassLoader.loadClass(ClassLoader.java:626)
... 56 more
最佳答案
问题可能是由您用来执行代码的 JRE 版本引起的:如果您使用 JRE 1.6,它将不会执行为 JRE 1.7 编译的字节码。 JRE 1.7 可以完美运行 1.6 和 1.7 字节码。尝试切换到 JRE 1.7 或更高版本。
关于在使用 1.6 jdk 编译的项目中运行 jdk 1.7 编译的 jarfile 时出现 java.lang.NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27905836/