2012-08-09 52 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

相關問題