Spring: вложенное исключение - java.lang.NoClassDefFoundError: org/aopalliance/aop/Advice

Трассировка стека:

Oct 24, 2014 8:12:04 AM org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
INFO: Refreshing org[email protected]50df2e: startup date [Fri Oct 24 08:12:04 IST 2014]; root of context hierarchy
Oct 24, 2014 8:12:05 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [knights-aop.xml]
Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [knights-aop.xml]; nested exception is java.lang.NoClassDefFoundError: org/aopalliance/aop/Advice
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:412)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:243)
    at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:127)
    at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:93)
    at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130)
    at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:537)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:451)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
    at com.java.spring.SpringDemo.main(SpringDemo.java:12)
Caused by: java.lang.NoClassDefFoundError: org/aopalliance/aop/Advice
    at org.springframework.aop.config.ConfigBeanDefinitionParser.getAdviceClass(ConfigBeanDefinitionParser.java:410)
    at org.springframework.aop.config.ConfigBeanDefinitionParser.createAdviceDefinition(ConfigBeanDefinitionParser.java:366)
    at org.springframework.aop.config.ConfigBeanDefinitionParser.parseAdvice(ConfigBeanDefinitionParser.java:332)
    at org.springframework.aop.config.ConfigBeanDefinitionParser.parseAspect(ConfigBeanDefinitionParser.java:227)
    at org.springframework.aop.config.ConfigBeanDefinitionParser.parse(ConfigBeanDefinitionParser.java:115)
    at org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:73)
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1438)
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1428)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:195)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:139)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:108)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390)
    ... 14 more

config xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:aop="http://www.springframework.org/schema/aop"
 xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/aop 
    http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">

  <bean id="knight" class="com.java.spring.BraveKnight">
    <constructor-arg ref="quest" />
  </bean>

  <bean id="quest" class="com.java.spring.ResqueDamselQuest" />

  <bean id="minstrel" 
     class="com.java.spring.Minstrel" /> <!--<co id="co_minstrel_bean"/>-->

  <aop:config>
    <aop:aspect ref="minstrel">

      <aop:pointcut id="embark" 
          expression="execution(* *.embarkOnQuest(..))" /> <!--<co id="co_define_pointcut"/>-->

      <aop:before pointcut-ref="embark"
                  method="singBeforeQuest"/>    <!--<co id="co_minstrel_before_advice"/>-->

      <aop:after pointcut-ref="embark"
                 method="singAfterQuest"/>     <!--<co id="co_minstrel_after_advice"/>-->

    </aop:aspect>
  </aop:config>
</beans>

Мой основной класс:

public class SpringDemo {
    public static void main(String[] args) {
        final ApplicationContext applicationContext = new ClassPathXmlApplicationContext("knights-aop.xml");
        final Knight braveKnight = (Knight) applicationContext.getBean("knight");
        braveKnight.embarkOnQuest();
    }
}

Я также попытался добавить: aopalliance.jar и aopalliance-alpha1.jar отдельно и вместе, но ошибка не исчезнет.

Здесь есть похожие вопросы: spring Вложенное исключение - это java.lang.NoClassDefFoundError: org/aopalliance/aop/Advice

########### EDIT ########### Обновление: Другие классы в проекте ##
Minstrel.java

package com.java.spring;

    public class Minstrel {
        public void singBeforeQuest(){
            System.out.println("Fa la la Theknight is so brave!");
        }
        public void singAfterQuest(){
            System.out.println(
                    "Tee hee he The brave knight did embark on a quest!");
        }
    }

BraveKnight.java

package com.java.spring;

public class BraveKnight implements Knight {
    private Quest quest;

    BraveKnight(Quest quest) {
        this.quest = quest;
    }

    @Override
    public void embarkOnQuest() {
        quest.embark();
    }
}

RescueDamselQuest.java

package com.java.spring;

    public class RescueDamselQuest implements Quest {

        @Override
        public void embark() {
            System.out.println("Damsel rescue quest is on.");
        }
    }


Я использую Spring 3.2
################## EDIT2 ###################
Я не используя Maven. Пожалуйста, не предоставляйте решение Maven, если Spring AOP невозможно без него.
Привязка к проекту:
enter image description here
Внутри Spring БИБЛИОТЕКА У меня есть все банки, загруженные с помощью Spring. Возможно ли, что какая-то конкретная jar-коннекция конфликтует с банкой aopalliance?

Если у кого-то есть похожий и простой рабочий пример без Maven, пожалуйста, предоставьте его.

Спасибо
~ Мохит

Ответ 1

Я полностью удалил SPRING -LIBRARY, а затем добавил все необходимые банки один за другим плюс cglib-nodep-2.2.jar.
В моем коде также была ошибка орфографии <bean id="quest" class="com.java.spring.ResqueDamselQuest" />

public class RescueDamselQuest implements Quest {

Название класса.

Но я уверен, что эта орфографическая ошибка не была причиной исключения, которое я получал. После добавления ящиков с нуля я получил эту ошибку, в которой говорится, что bean не найден, как упоминалось в файле knights-aop.xml sth.. sth..., когда я понял, что у меня есть эта опечатка.

Вот как теперь добавляются мои банки:

enter image description here

Я надеюсь, что кто-то может получить помощь от этого ответа.

########### EDIT ###########

asm-all и cglib-nodep не требуются. Кроме того, некоторые jar из spring загрузки вызывали проблемы, поскольку я пытался добавить все банки, которые я получил в spring, и снова начал показывать старое исключение. Поэтому лучше добавить банку как можно раньше.

Ответ 2

Похоже, вы добавляете банку aopalliance к пути сборки build вашей среды IDE (Eclipse?). Это объясняет, что среда IDE не обнаруживает ошибок и принимает решение о создании приложения. Но на самом деле вы также должны добавить его в путь выполнения.

В зависимости от используемой среды IDE другое меню может разрешить ее настройку. Но если вы хотите запустить его за пределами среды IDE, вы должны поместить банку в свой обычный путь к классу, либо поставив его вместе с другими существующими банками, либо (будет лучше), изменив ваш путь к пользователю или системному классу, чтобы включить в него папку, содержащую банку.

Я мог бы уточнить это, если вам нужно, и если я знаю вашу систему...

Ответ 3

перекрестная проверка с помощью com.springsource.org.aopalliance-X.X.X.jar

Ответ 4

Вам не хватает зависимости. Не уверен, как вы обрабатываете зависимости, но просто добавляйте JAR в IVY или что вы используете. Вы должны использовать что-то, чтобы добавить Spring 3.2.

Maven Central: ссылка

IVY Пример: <dependency org="org.springframework" name="spring-aop" rev="3.2.11.RELEASE" /> Maven имеет другую доступную информацию о зависимости.

Если это веб-приложение, убедитесь, что JAR находится в APPNAME/WEB-INF/lib.

Ответ 5

Убедитесь, что в вашем файле pom.xml есть следующее:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aop</artifactId>
    <version>${springframework.version}</version>
</dependency>

Согласно вашей трассировке стека ошибок.

Caused by: java.lang.NoClassDefFoundError: org/aopalliance/aop/Advice

Ниже приведено обязательное

<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjrt</artifactId>
    <version>${aspectj.version}</version>
</dependency>
<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>${aspectj.version}</version>
</dependency>

Конечно, вы должны установить или настроить каждую версию для Spring и AOP.

Я понял, что позже вы не работаете с Maven, даже с тем, что в Maven Central Repository вы можете загрузить банки, требуемый в соответствии с моими зависимостями, описанными выше

Ответ 6

Наряду с банком aopalliance вы добавили эти банки в свой путь сборки?

aspectjrt
springaop
aspectjweaver

Если нет, вы можете попробовать, добавив их.

P.S: используйте соответствующую версию банок...