Guice 2.0中的ClassNotFoundException

7
下面的代码在使用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

可能出现什么问题?
5个回答

12
您未包含在类路径中的依赖项 jar 中的类 org.aopalliance.intercept.MethodInterceptor。请在 jar 中添加该类。要获取 jar,请访问此处

我猜这是RTFM的典型案例。谢谢! - Benno Richters

6
根据Boris Pavlović在他的答案中提到的,您缺少一个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。

2
我昨天遇到了这个问题,依赖项是由Maven管理的,所以aopalliance.jar毫无疑问地在类路径中。
将Jetty从6.1.10版本更新到6.1.26版本解决了该问题。
真正的问题在于容器不支持aopalliance.jar。我希望这能帮助那些迫切寻找解决方案的人们。

我正在使用6.1.26版本,但仍然遇到了这个问题 :( - ndtreviv

0
今天我遇到了这个问题。实际上,Tomcat在其lib中找不到该类。所以只需将aopalliance.jar复制到Tomcat的lib文件夹中即可。

-2

对我来说,添加以下jar包很好用。
javax.inject.jar
guice-3.0-no_aop.jar


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接