我在64位计算机上启动服务时遇到以下异常。 但代码在32位机器上运行良好。
java.lang.NoClassDefFoundError: org/objectweb/asm/commons/EmptyVisitor
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at org.springframework.context.support.GenericApplicationContext.<init (GenericApplicationContext.java:103)
at org.springframework.context.support.GenericApplicationContext.<init>(GenericApplicationContext.java:125)
at org.springframework.coral.CoralApplicationContext.<init>(CoralApplicationContext.java:41)
at org.springframework.coral.CoralApplicationContext.<init>(CoralApplicationContext.java:35)
at org.springframework.coral.DisposableApplicationContext.<init>(DisposableApplicationContext.java:16)
at com.amazon.coral.spring.Launcher.<init>(Launcher.java:85)
at com.amazon.coral.spring.Launcher.main(Launcher.java:56)
Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.commons.EmptyVisitor
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
... 19 more
答案 0 :(得分:1)
除非您(或您使用的库)使用本机代码,否则底层平台很少是Java程序中的问题。
来自NoClassDefFoundError
的Javadoc(http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/NoClassDefFoundError.html):
如果Java虚拟机或ClassLoader实例尝试,则抛出该异常 加载类的定义(作为普通方法调用的一部分或 作为使用新表达式创建新实例的一部分)和否 可以找到班级的定义。
当前正在执行的搜索类定义存在 编译了类,但无法再找到定义。
因此,在编译代码时它就存在了,但是当你尝试在其他地方运行时它就不再存在了。最常见的原因是类路径设置不正确,通常是没有包含相关类的jar文件不在类路径中。修改类路径定义并重新运行。
如果您不熟悉类路径的工作方式,我强烈建议您阅读Oracle Java教程。
答案 1 :(得分:0)
99%的可能性是您在运行它的机器上有一个CLASSPATH
环境变量,而不是在它没有的机器上。如果您从后者的服务和前者的命令行开始,请将其设为99.9%。
答案 2 :(得分:0)
检查您的JAVA_HOME环境变量。如果您使用的是eclipse IDE,请检查IDE的Java Build Path。
答案 3 :(得分:0)
我面临同样的问题。我通过添加以下2个jar文件解决了这个问题:
asm-all 2.2.3.jar
cglib-nodep 2.1_3.jar
并从我遇到错误的计算机(64位)中删除asm.jar
和cglib.jar
。
但我的问题是为什么这个问题会在该机器中退出。我检查了CLASSPATH
,PATH
和JAVA_HOME
环境变量。但两台机器都是一样的。
答案 4 :(得分:0)
我面临同样的问题。我通过添加以下2个jar文件解决了这个问题:
asm-all 3.3.1.jar cglib-nodep 2.1.3.jar 并删除lib中的asm.jar和cglib.jar