Guice 2.0 的 ClassNotFoundException
-
13-09-2019 - |
题
下面的代码使用 Guice 2.0 生成错误。使用 Guice 1.0 一切都很好。JDK 是 Java 6 更新 15。
public class App {
public static void main(String[] args) {
Guice.createInjector(new AbstractModule() {
@Override
protected void configure() {
// just testing
}
});
}
}
错误是:
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
可能是什么问题?
解决方案
其他提示
作为 鲍里斯·帕夫洛维奇 他的回答中提到,你缺少一个罐子。特别是 aopalliance.jar 文件,它包含在 guice 中 压缩文件
或者,您可以尝试使用 guice-2.0-no_aop.jar, ,但我不确定这是否有效。
将此文件添加到类路径取决于您使用哪个工具来运行 java 代码。
- 如果您从命令行运行 java:
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
- 如果您从 Eclipse 运行 java, 通常,您会遇到某种类型的 lib/ 目录。把你的罐子放在那里, 然后右键单击 jar -> Build path -> 添加到构建路径
我遇到这个问题昨天,依赖关系是由Maven的管理,所以aopalliance.jar是在类路径毫无疑问的。结果
更新从6.1.10版本6.1.26码头解决了这一问题。
这里真正的问题是,容器不支持aopalliance.jar。我希望这将帮助别人那里拼命寻找一个解决方案。
我今天碰上了这个问题。其实tomcat的找不到它的lib中的类。所以只是aopalliance.jar复制到Tomcat中的lib文件夹,这就足够了。
添加下面的罐子对我来说效果很好。
javax.inject.jar
guice-3.0-no_aop.jar
不隶属于 StackOverflow