2009-08-12 3 views
6

Код ниже генерирует ошибку, используя Guice 2.0. С Guice 1.0 все в порядке. JDK является Java 6 обновление 15.ClassNotFoundException with Guice 2.0

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

Вы пропустили включить dependency jar в класс org.aopalliance.intercept.MethodInterceptor в путь к классу.

+0

типичный случай RTFM я полагаю. Спасибо!! –

6

как Boris Pavlović упоминает в своем ответе, что у вас отсутствует кувшин. В частности, файл aopalliance.jar, который входит в список 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 
  • Если вы работаете в Java с Eclipse, обычно вы будете иметь некоторый тип Lib /. Поместите банку там, затем щелкните правой кнопкой мыши на баночке -> Build Path -> Добавить в Путь сборки
1

Я бегу в эту проблему вчера, зависимость управляется Maven, поэтому aopalliance.jar является в classpath, без сомнения.

Обновление причала с версии 6.1.10 до 6.1.26 устраняет проблему.

Настоящая проблема заключается в том, что контейнер не поддерживает aopalliance.jar. Надеюсь, это поможет кому-то отчаянно найти решение.

+0

Я использую 6.1.26 и все еще получаю проблему :( – ndtreviv

0

Я столкнулся с этой проблемой сегодня. На самом деле tomcat не может найти класс в своей библиотеке. Поэтому просто скопируйте файл aopalliance.jar в папку lib в tomcat, этого достаточно.

-2

Добавление нижеследующих банок отлично подходит для меня.
javax.inject.jar
Guice-3,0-no_aop.jar