2012-08-09 78 views
0

在64位计算机上启动服务时出现以下异常。 但是代码在32位机器上运行良好。在64位计算机上运行时出现NoClassDefFoundError

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

是两个盒子之间的一切完全相同?你正在使用spring,如果你更新了库的版本,你可能会遇到这个问题:http://forum.springsource.org/showthread.php?20324-NoClassDefFoundError-org-objectweb -asm-CodeVisitor – 2012-08-09 16:39:18

+0

代码包版本完全相同。 – 2012-08-09 18:17:05

回答

0

99%的可能性是,你必须在机器上一个CLASSPATH环境变量,它运行,而不是在它不机器。如果你从后者的服务和前者的命令行开始,那么使99.9%。

0

检查您的JAVA_HOME环境变量。如果您使用的是Eclipse IDE,请检查IDE的Java Build Path。

0

我面对同样的问题。我通过添加下面2 jar文件解决了这个问题:

  • asm-all 2.2.3.jar
  • cglib-nodep 2.1_3.jar

并从那里我得到了错误的机器(64位)的asm.jarcglib.jar

但我的问题是为什么这个问题在该机器退出。我检查了CLASSPATH,PATHJAVA_HOME环境变量。但是两台机器都是一样的。

1

除非您(或您使用的库)正在使用本机代码,否则底层平台在Java程序中很少出现问题。

NoClassDefFoundError的Javadoc(http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/NoClassDefFoundError.html):

当Java虚拟抛出该异常机器或ClassLoader实例尝试在类的定义中加载 (作为常规方法调用的一部分,或作为使用新表达式创建新实例的一部分),并且不能找到该类的定义。

当编译当前正在执行的 类时,搜索到的类定义存在,但无法再找到该定义。

所以当代码被编译时,它就出现了,但是当你试图在其他地方运行它时,它就不存在了。最典型的原因是类路径的设置不正确,通常是因为没有包含相关类的jar文件不在类路径中。修改你的类路径定义并重新运行。

如果您不熟悉类路径的工作方式,我强烈建议您阅读Oracle Java教程。

0

我正面临同样的问题。我通过添加以下2 jar文件解决了这个问题:

ASM-所有3.3.1.jar CGLIB的节点p 2.1.3.jar 并删除lib中asm.jar和cglib.jar

相关问题