2009-08-12 24 views
6

El código siguiente genera un error con Guice 2.0. Con Guice 1.0 todo está bien. El JDK es 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 
      } 
     }); 
    } 
} 

El error es:

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 

Cuál puede ser el problema?

Respuesta

11

Ha omitido incluir un dependency jar con la clase org.aopalliance.intercept.MethodInterceptor en el classpath.

+0

caso típico guice-3,0-no_aop.jar de RTFM supongo. ¡¡Gracias!! –

6

como Boris Pavlović menciones en su respuesta, de usted falta un tarro. Específicamente el archivo aopalliance.jar, que viene en la guía zip file

Alternativamente, puede intentar usar guice-2.0-no_aop.jar, pero no estoy seguro si eso funcionará.

Agregar este archivo al classpath depende de la herramienta que use para ejecutar su código java.

  • Si está ejecutando Java desde la línea de comandos:
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 
  • Si está ejecutando java desde Eclipse, normalmente usted tendrá algún tipo de lib/directorio. Poner su frasco de allí, a continuación, haga clic en el frasco -> Build Path -> Añadir para generar Ruta
1

me encuentro con este problema ayer, la dependencia es administrado por Maven, por lo que el aopalliance.jar es en classpath sin duda.

Actualizar embarcadero desde la versión 6.1.10 a 6.1.26 solucionó el problema.

El problema real aquí es que el contenedor no admite aopalliance.jar. Espero que eso ayude a alguien a buscar desesperadamente una solución.

+0

Estoy usando 6.1.26 y sigo teniendo el problema :( – ndtreviv

0

Me encuentro con este problema hoy. En realidad, el tomcat no puede encontrar la clase en su lib. Así que simplemente copie el archivo aopalliance.jar en la carpeta lib en tomcat, eso es suficiente.

-2

Agregar los siguientes jarrones funciona bien para mí.
javax.inject.jar