NoClassDefFoundError的同时,在64位计算机上运行(NoClassDefFound

2019-09-21 01:34发布

我得到一个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

Answer 1:

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

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

如果Java虚拟机或ClassLoader实例试图在类的定义中加载(作为通常方法调用的一部分或者作为使用new表达式创建新实例的一部分),没有阶级的定义可以发现抛出。

当目前执行的类被编译所搜索的类定义存在,但定义可以不再被发现。

因此,它是存在,当编译代码,但现在不是了,当你到别的地方运行它。 此单最典型的原因是,类路径被错误地设置,通常是通过不具有包含所讨论的类的jar文件是不在类路径。 修改你的类路径定义并重新运行。

如果你不熟悉的类路径是如何工作的,我可以强烈建议在Oracle Java教程阅读起来。



Answer 2:

99%的可能性是,你有一个CLASSPATH在机器上的环境变量,其中运行,而不是在它不机器。 如果你从后者和前者的命令行服务出发,作出这样的99.9%。



Answer 3:

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



Answer 4:

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

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

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

但我的问题是,为什么这个问题在机退出。 我检查CLASSPATHPATHJAVA_HOME环境可变因素。 但这一切都在两个机器一样。



Answer 5:

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

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



文章来源: NoClassDefFoundError while running on 64bit machine