2009-08-12 49 views
6

下面的代碼使用Guice 2.0產生錯誤。用Guice 1.0一切都很好。在JDK是Java 6的更新15使用Guice 2.0的ClassNotFoundException

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 

可以採取什麼問題嗎?

回答

11

您錯過了在類路徑中包含類org.aopalliance.intercept.MethodInterceptordependency jar

+0

典型RTFM的情況下,我猜。謝謝!! – 2009-08-12 15:13:12

6

as Boris Pavlović在他的回答中提到,你錯過了一個罐子。具體來說,aopalliance.jar文件,它來自於guice zip file

或者,您可以嘗試使用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的/ 目錄。把你的罐子在那裏, 然後在瓶子右擊 - >構建 路徑 - >添加到構建路徑
1

我碰到這個問題,昨天的依賴是Maven的管理,所以aopalliance.jar是毫無疑問,在classpath中。

更新從版本6.1.10到6.1.26的jetty修復了該問題。

這裏真正的問題是容器不支持aopalliance.jar。我希望這會幫助那些急切尋找解決方案的人。

+0

我正在使用6.1.26,仍然出現問題:( – ndtreviv 2016-01-12 12:09:24

0

今天我遇到了這個問題。實際上,tomcat無法在其lib中找到該類。所以只需將aopalliance.jar複製到tomcat的lib文件夾中,就足夠了。

-2

添加下面的罐子適合我。
javax.inject.jar
吉斯-3.0-no_aop.jar