2009-08-12 25 views
6

Der folgende Code generiert einen Fehler unter Verwendung von Guice 2.0. Mit Guice 1.0 ist alles in Ordnung. Das JDK ist Java 6 Update 15.ClassNotFoundException mit Guice 2.0

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

Der Fehler ist:

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 

Was das Problem sein kann?

Antwort

11

Sie haben versäumt, einen dependency jar mit der Klasse org.aopalliance.intercept.MethodInterceptor in den Klassenpfad aufzunehmen.

+0

typischer Fall von RTFM, denke ich. Danke!! –

6

als Boris Pavlović erwähnt in seiner Antwort, Sie vermissen ein Glas. Insbesondere die Datei aopalliance.jar, die in der Schriftart zip file

kommt Alternativ können Sie versuchen, guice-2.0-no_aop.jar verwenden, aber ich bin mir nicht sicher, ob das funktioniert.

Das Hinzufügen dieser Datei zum Klassenpfad hängt davon ab, mit welchem ​​Werkzeug Sie Ihren Java-Code ausführen.

  • Wenn Sie Java von der Kommandozeile ausgeführt werden:
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 
  • Wenn Sie Java von Eclipse läuft, Regel werden Sie irgendeine Art von lib/Verzeichnis. Setzen Sie Ihr Glas dort dann mit der rechten Maustaste auf das Glas -> Build Pfad -> Pfad hinzufügen Build
1

ich in dieses Problem gestern, wird die Abhängigkeit von Maven verwaltet werden, so dass die aopalliance.jar ist im Klassenpfad ohne Zweifel.

Update-Brücke von Version 6.1.10 zu 6.1.26 behebt das Problem.

Das eigentliche Problem hier ist der Container unterstützt nicht aopalliance.jar. Ich hoffe, dass das jemandem helfen wird, der verzweifelt nach einer Lösung sucht.

+0

Ich benutze 6.1.26 und bekomme immer noch das Problem :( – ndtreviv

0

Ich laufe heute auf dieses Problem. Eigentlich kann der Kater die Klasse nicht in seiner Bibliothek finden. Kopieren Sie einfach die aopalliance.jar in den lib-Ordner in Tomcat, das ist genug.

-2

Das Hinzufügen der unten Gläser funktioniert gut für mich.
javax.inject.jar
guice-3.0-no_aop.jar

Verwandte Themen