2009-08-12 19 views
6

Il codice sottostante genera un errore utilizzando Guice 2.0. Con Guice 1.0 tutto è a posto. Il JDK è Java 6 Update 15.ClassNotFoundException con Guice 2.0

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

L'errore è:

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 

Quale può essere il problema?

risposta

11

Ti sei perso per includere un dependency jar con la classe org.aopalliance.intercept.MethodInterceptor nel classpath.

+0

tipico caso di RTFM immagino. Grazie!! –

6

come Boris Pavlović menziona nella sua risposta, ti manca un barattolo. In particolare il file aopalliance.jar, che viene nel guaio zip file

In alternativa, si potrebbe provare a utilizzare guice-2.0-no_aop.jar, ma non sono sicuro che funzionerà.

L'aggiunta di questo file al classpath dipende dallo strumento utilizzato per eseguire il codice java.

  • Se si esegue java dalla riga di comando:
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 
  • Se si esegue java da Eclipse, tipicamente avrete un certo tipo di lib/directory. Metti il ​​tuo vaso lì, quindi fare clic destro sul vaso -> Crea Percorso -> Aggiungi a costruire il percorso
1

mi imbatto in questo problema ieri, la dipendenza è gestito da Maven, in modo che l'aopalliance.jar è in classpath senza dubbio.

L'aggiornamento del molo dalla versione 6.1.10 alla versione 6.1.26 ha risolto il problema.

Il vero problema qui è che il contenitore non supporta aopalliance.jar. Spero che possa aiutare qualcuno che cerca disperatamente una soluzione.

+0

Sto usando 6.1.26 e continuo ad avere il problema :( – ndtreviv

0

Oggi mi imbatto in questo problema. In realtà il tomcat non riesce a trovare la classe nella sua lib. Quindi copia semplicemente aopalliance.jar nella cartella lib di tomcat, è sufficiente.

-2

L'aggiunta dei vasi sottostanti va bene per me.
javax.inject.jar
Guice-3.0-no_aop.jar

Problemi correlati