2009-08-12 18 views
6

Poniższy kod generuje błąd przy użyciu Guice 2.0. Z Guice 1.0 wszystko jest w porządku. JDK jest Java 6 Update 15.Wyjątek ClassNotFoundException z Guice 2.0

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

Błąd jest:

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 

Co może być problemem?

Odpowiedz

11

Nie udało Ci się dołączyć dependency jar do klasy org.aopalliance.intercept.MethodInterceptor w ścieżce klas.

+0

typowy przypadek RTFM chyba. Dzięki!! –

6

jako Boris Pavlović wspomina w swojej odpowiedzi, że brakuje słoika. W szczególności plik aopalliance.jar, który jest dostępny jako alternatywa, może próbować użyć wartości guice-2.0-no_aop.jar, ale nie jestem pewien, czy to zadziała.

Dodanie tego pliku do ścieżki klasy zależy od narzędzia, za pomocą którego uruchamiasz kod Java.

  • Jeśli używasz Java z wiersza poleceń:
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 
  • Jeśli używasz Java z Eclipse, zwykle będziesz mieć jakiś rodzaj lib/katalog. Połóż słoik tam następnie kliknij prawym przyciskiem myszy na słoiku -> Budowanie Path -> Dodaj do Build Path
1

biegnę do tego problemu wczoraj, zależność jest zarządzany przez Maven, więc aopalliance.jar jest w Classpath bez wątpienia.

Aktualizacja pomostu z wersji 6.1.10 do 6.1.26 naprawiła problem.

Prawdziwy problem polega na tym, że kontener nie obsługuje pliku aopalliance.jar. Mam nadzieję, że pomoże to komuś tam, desperacko szukając rozwiązania.

+0

Używam 6.1.26 i nadal otrzymuję problem :( – ndtreviv

0

Dzisiaj napotykam ten problem. Właściwie tomcat nie może znaleźć klasy w swojej bibliotece. Więc wystarczy skopiować plik aopalliance.jar do folderu lib w tomcat, to wystarczy.

-2

Dodanie poniższych słoików działa dobrze dla mnie.
javax.inject.jar
Guice-3,0-no_aop.jar

Powiązane problemy