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 式を使用した新しいインスタンスの作成の一部として) クラスの定義にロードしようとしたときに、クラスの定義が見つからなかった場合にスローされます。

検索対象のクラス定義は、現在実行中のクラスがコンパイルされたときに存在していましたが、その定義が見つからなくなりました。

したがって、コードがコンパイルされたときには存在していましたが、別の場所で実行しようとすると存在しなくなりました。これの最も一般的な理由の 1 つは、クラスパスが正しく設定されていないことです。通常は、問題のクラスを含む jar ファイルがクラスパスにないためです。クラスパス定義を修正して再実行してください。

クラスパスの仕組みに慣れていない場合は、Oracle Java チュートリアルを読むことを強くお勧めします。

于 2012-09-23T21:37:42.003 に答える
0

99% の可能性は、CLASSPATH環境変数が実行されているマシンにあり、実行されていないマシンには環境変数がないことです。後者でサービスから開始し、前者でコマンドラインから開始する場合は、それを 99.9% にします。

于 2012-08-09T17:46:10.380 に答える
0

私が直面している同じ問題。次の 2 つの jar ファイルを追加して、問題を解決しました。

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

エラーが発生したマシン(64ビット)からasm.jarandを削除します。cglib.jar

しかし、私の質問は、なぜこの問題がそのマシンに存在するのかということです。CLASSPATHPATHおよびJAVA_HOME環境変数をチェックしました。しかし、すべてが 2 つのマシンで同じです。

于 2012-08-10T15:09:04.477 に答える
0

JAVA_HOME 環境変数を確認してください。Eclipse IDE を使用している場合は、IDE の Java ビルド パスを確認してください。

于 2012-08-10T06:53:46.210 に答える