1

在 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
4

5 回答 5

1

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

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

如果 Java 虚拟机或 ClassLoader 实例尝试加载类的定义(作为正常方法调用的一部分或作为使用 new 表达式创建新实例的一部分)并且找不到类的定义,则抛出此异常。

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

因此,它在编译代码时存在,但当您尝试在其他地方运行它时不再存在。最典型的原因是类路径设置不正确,通常是因为包含相关类的 jar 文件不在类路径中。修改您的类路径定义并重新运行。

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

于 2012-09-23T21:37:42.003 回答
0

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

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

asm.jarcglib.jar从出现错误的机器(64位)中删除and 。

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

于 2012-08-10T15:09:04.477 回答
0

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

asm-all 3.3.1.jar cglib-nodep 2.1.3.jar 并删除 lib 中的 asm.jar 和 cglib.jar

于 2014-05-28T12:00:06.807 回答
0

检查您的 JAVA_HOME 环境变量。如果您使用的是 Eclipse IDE,请检查您的 IDE 的 Java 构建路径。

于 2012-08-10T06:53:46.210 回答
0

99% 的可能性是您CLASSPATH在运行它的机器上有一个环境变量,而不是在没有它的机器上。如果您是从后者的服务和前者的命令行开始的,则将其设为 99.9%。

于 2012-08-09T17:46:10.380 回答