ClassNotFoundException mit Guice 2.0
-
13-09-2019 - |
Frage
Der folgende Code generiert bei Verwendung von Guice 2.0 einen Fehler.Mit Guice 1.0 ist alles in Ordnung.Das JDK ist Java 6 Update 15.
public class App {
public static void main(String[] args) {
Guice.createInjector(new AbstractModule() {
@Override
protected void configure() {
// just testing
}
});
}
}
Der Fehler ist:
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
Was kann das Problem sein?
Lösung
Sie haben verpasst einen Abhängigkeit jar mit der Klasse org.aopalliance.intercept.MethodInterceptor
im Classpath enthalten.
Andere Tipps
Boris Pavlovic in seiner Antwort erwähnt, Sie fehlt ein Krug. Insbesondere die aopalliance.jar-Datei, die in der guice Zip-Datei kommt
Alternativ können Sie versuchen, guice-2.0-no_aop.jar , aber ich bin nicht sicher, ob das funktionieren wird.
Sie diese Datei auf den Classpath Hinzufügen, hängt von dem Werkzeug, das Sie Ihren Java-Code ausführen verwenden.
- Wenn Sie Java von der Kommandozeile ausgeführt werden:
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
- Wenn Sie Java von Eclipse ausgeführt wird, Regel werden Sie irgendeine Art von haben lib / Verzeichnis. Setzen Sie Ihr Glas gibt, dann auf dem Glas der rechten Maustaste -> Build Pfad -> Pfad hinzufügen Build
ich in dieses Problem gestern, wird die Abhängigkeit von Maven verwaltet werden, so dass die aopalliance.jar in Classpath ohne Zweifel.
Update Anlegesteg von Version 6.1.10 auf 6.1.26 das Problem behoben.
Das eigentliche Problem hier ist der Behälter aopalliance.jar nicht unterstützt. Ich hoffe, dass da jemand helfen wird dringend nach einer Lösung suchen.
Ich laufe in dieses Problem heute. Eigentlich kann der Kater nicht die Klasse in seiner lib finden. So kopieren Sie einfach die aopalliance.jar in den Ordner lib in tomcat, das reicht.
Das Hinzufügen der folgenden Gläser funktioniert bei mir einwandfrei.
javax.inject.jar
guice-3.0-no_aop.jar