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

可能是什么问题?

4

5 回答 5

12

您错过了在类路径中包含类的依赖项 jarorg.aopalliance.intercept.MethodInterceptor

于 2009-08-12T15:06:20.813 回答
6

正如鲍里斯·帕夫洛维奇(Boris Pavlović)在他的回答中提到的那样,您缺少一个罐子。特别是 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
于 2009-08-12T15:26:00.807 回答
2

我昨天遇到了这个问题,依赖是由 Maven 管理的,所以 aopalliance.jar 毫无疑问在类路径中。

将 jetty 从版本 6.1.10 更新到 6.1.26 修复了该问题。

这里真正的问题是容器不支持 aopalliance.jar。我希望这将帮助那里拼命寻找解决方案的人。

于 2010-12-08T02:48:48.870 回答
0

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

于 2012-03-02T11:15:54.827 回答
-2

添加下面的罐子对我来说很好。
javax.inject.jar
guice-3.0-no_aop.jar

于 2016-07-09T17:38:56.303 回答