Domanda

Il codice seguente genera un errore Guice 2.0.Con Guice 1.0 è tutto a posto.La JDK di Java 6 update 15.

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?

È stato utile?

Soluzione

Non si è risposto ad includere un dipendenza vaso con il org.aopalliance.intercept.MethodInterceptor classe nel classpath.

Altri suggerimenti

come Boris Pavlović cita nella sua risposta, che ti manca un vaso.In particolare il aopalliance.jar file, che viene in guice file zip

In alternativa, si potrebbe provare a utilizzare guice-2.0-no_aop.jar, ma non so se funzionerà.

L'aggiunta di questo file per il classpath dipende da quale strumento da utilizzare per eseguire il codice java.

  • Se si esegue java da linea 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 Eclipse, solitamente, hanno un qualche tipo di lib/ directory.Mettere il vaso c', quindi fare clic destro su il vaso -> Build Percorso -> Aggiungi a Costruire Percorso

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

Aggiornamento molo dalla versione 6.1.10 alla 6.1.26 risolto il problema.

Il vero problema qui è il contenitore non supporta aopalliance.jar. Spero che aiuterà qualcuno lì alla disperata ricerca di una soluzione.

mi imbatto in questo problema oggi. In realtà il gatto non riesce a trovare la classe nel suo lib. Quindi, basta copiare l'aopalliance.jar nella cartella lib di Tomcat, che è abbastanza.

Aggiungere il seguente vasetti funziona bene per me.
javax.inject.jar
guice-3.0-no_aop.jar

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top