Вопрос

Приведенный ниже код генерирует ошибку при использовании 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 в пути к классам.

Другие советы

как Boris Pavlović упоминает в своем ответе, что вам не хватает банки.В частности, файл aopalliance.jar, который поставляется в виде zip-файл

В качестве альтернативы, вы можете попробовать использовать guice-2.0-no_aop.jar, но я не уверен, что это сработает.

Добавление этого файла в classpath зависит от того, какой инструмент вы используете для запуска вашего 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 / directory.Поместите туда свой jar, затем щелкните правой кнопкой мыши на jar -> Построить Путь -> Добавить в путь сборки

Вчера я столкнулся с этой проблемой: зависимостью управляет Maven, поэтому aopalliance.jar без сомнения находится в пути к классам.

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

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

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

Добавление приведенных ниже банок у меня отлично работает.
javax.inject.jar
guice-3.0-no_aop.jar

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top