7

以下のコードは、Guice 2.0 を使用してエラーを生成します。Guice 1.0 ではすべて問題ありません。JDK は Java 6 update 15 です。

public class App {
    public static void main(String[] args) {
        Guice.createInjector(new AbstractModule() {
            @Override
            protected void configure() {
                // just testing 
            }
        });
    }
}

エラーは次のとおりです。

Exception in thread "main" java.lang.NoClassDefFoundError: [Lorg/aopalliance/intercept/MethodInterceptor;
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2427)
    at java.lang.Class.getDeclaredMethods(Class.java:1791)
    at com.google.inject.internal.ProviderMethodsModule.getProviderMethods(ProviderMethodsModule.java:78)
    at com.google.inject.internal.ProviderMethodsModule.configure(ProviderMethodsModule.java:70)
    at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:223)
    at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:232)
    at com.google.inject.spi.Elements.getElements(Elements.java:101)
    at com.google.inject.InjectorShell$Builder.build(InjectorShell.java:135)
    at com.google.inject.InjectorBuilder.build(InjectorBuilder.java:102)
    at com.google.inject.Guice.createInjector(Guice.java:92)
    at com.google.inject.Guice.createInjector(Guice.java:69)
    at com.google.inject.Guice.createInjector(Guice.java:59)
    at App.main(App.java:6)
Caused by: java.lang.ClassNotFoundException: org.aopalliance.intercept.MethodInterceptor
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
    ... 14 more

何が問題になる可能性がありますか?

4

5 に答える 5

12

クラスパスのクラスに依存関係の jarを含めませんでした。org.aopalliance.intercept.MethodInterceptor

于 2009-08-12T15:06:20.813 に答える
6

Boris Pavlovićが彼の回答で言及しているように、瓶がありません。具体的には、guice zip ファイルに含まれる aopalliance.jar ファイル

別の方法として、 guice-2.0-no_aop.jarを試してみることもできますが、うまくいくかどうかはわかりません。

このファイルをクラスパスに追加する方法は、Java コードの実行に使用するツールによって異なります。

  • コマンドラインから Java を実行している場合:
windows: java -cp aopalliance.jar;guice-2.0.jar;other_jars.jar YourMainClass
*nix:    java -cp aopalliance.jar:guice-2.0.jar:other_jars.jar YourMainClass
  • Eclipse から Java を実行している場合、通常、何らかのタイプの lib/ ディレクトリがあります。jar をそこに置き、jar を右クリック -> ビルド パス -> ビルド パスに追加
于 2009-08-12T15:26:00.807 に答える
2

昨日この問題に遭遇しました。依存関係はMavenによって管理されているため、aopalliance.jarは間違いなくクラスパスにあります。

jetty をバージョン 6.1.10 から 6.1.26 に更新すると、問題が修正されました。

ここでの本当の問題は、コンテナーが aopalliance.jar をサポートしていないことです。必死に解決策を探している人に役立つことを願っています。

于 2010-12-08T02:48:48.870 に答える
0

今日、この問題に遭遇しました。実際、Tomcat はそのライブラリでクラスを見つけることができません。aopalliance.jar を tomcat の lib フォルダーにコピーするだけで十分です。

于 2012-03-02T11:15:54.827 に答える
-2

以下のjarを追加すると、うまくいきます。
javax.inject.jar
guice-3.0-no_aop.jar

于 2016-07-09T17:38:56.303 に答える