Question

Le code suivant génère une erreur à l'aide de Guice 2.0.Avec Guice 1.0, tout est parfait.Le JDK Java 6 update 15.

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

L'erreur est:

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

Quel peut être le problème?

Était-ce utile?

La solution

Vous avez oublié d'inclure un pot dépendance avec le org.aopalliance.intercept.MethodInterceptor de classe dans le classpath.

Autres conseils

Boris Pavlović mentionne dans sa réponse, vous manquez une pot. Plus précisément, le fichier aopalliance.jar, qui vient dans le Guice fichier zip

Vous pouvez essayer d'utiliser Guice-2.0-no_aop.jar , mais je ne sais pas si cela va fonctionner.

L'ajout de ce fichier dans le classpath dépend de l'outil utilisé pour exécuter votre code java.

  • Si vous utilisez Java à partir de la ligne de commande:
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 vous utilisez Java Eclipse, En général, vous aurez un certain type de lib /. Mettez votre pot là-bas, puis faites un clic droit sur le pot -> Construire Chemin -> Ajouter au chemin de compilation

Je rencontre ce problème hier, la dépendance est gérée par Maven, de sorte que le aopalliance.jar est sans doute classpath.

jetée de mise à jour de la version 6.1.10 à 6.1.26 a résolu le problème.

Le vrai problème est ici le conteneur ne supporte pas aopalliance.jar. J'espère que cela aidera quelqu'un cherche désespérément une solution.

Je rencontre ce problème aujourd'hui. En fait, le tomcat ne peut pas trouver la classe dans sa lib. Il suffit donc de copier le aopalliance.jar dans le dossier lib dans tomcat, ça suffit.

L'ajout de l'en-dessous de pots fonctionne très bien pour moi.
javax.inject.jar
guice-3.0-no_aop.jar

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top