使用Guice 2.0的ClassNotFoundException
下面的代码使用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
可能是什么问题?
您错过了在类路径中包含类org.aopalliance.intercept.MethodInterceptor
的依赖jar 。
正如鲍里斯·帕夫洛维奇在他的回答中提到的,你错过了一个jar子。 特别是aopalliance.jar文件,它位于guice zip文件中
或者,您可以尝试使用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放在那里,然后右键单击jar – > Build Path – > Add to Build Path
我昨天遇到了这个问题,依赖是由Maven管理的,所以aopalliance.jar毫无疑问是在classpath中。
从版本6.1.10到6.1.26更新jetty修复了问题。
这里真正的问题是容器不支持aopalliance.jar。 我希望这会帮助那些拼命寻找解决方案的人。
我今天遇到了这个问题。 实际上tomcat在lib中找不到类。 所以只需将aopalliance.jar复制到tomcat中的lib文件夹即可。
添加下面的jar子对我来说很好。
javax.inject.jar
吉斯-3.0-no_aop.jar
- classpath – 从命令行运行java程序
- Wildfly 8.1 ClassNotFound org.apache.http.conn.ClientConnectionManager
- classNotFound在eclipse中在Tomcat上使用JDBC进行MYSQL时出现exception
- Tomcat为其他开放日食项目中的类抛出ClassNotFoundexception
- 如何设置rmiregistry使用的类路径?
- java.lang.ClassNotFoundException:org.springframework.http.converter.json.MappingJackson2HttpMessageConverter
- 尝试使用Java连接到SQL Server 2005时出现ClassNotFoundException
- ClassNotFoundException在修改后的SimpleShortestPathsVertex上运行GiraphRunner
- 加载JDBC-ODBC驱动程序时出现exception