Spring:嵌套异常是java.lang.NoClassDefFoundError:org / aopalliance / aop / Advice

时间:2014-10-24 02:56:55

标签: java spring

堆栈跟踪:

Oct 24, 2014 8:12:04 AM org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@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&amp; aopalliance-alpha1.jar单独和一起但错误不会消失。

此处有类似的问题:spring nested exception is java.lang.NoClassDefFoundError: org/aopalliance/aop/Advice

###########编辑###########更新:项目中的其他课程##
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 LIBRARY我有所有用Spring下载的jar。是否有可能某些弹簧特定的罐子与aopalliance jar相冲突?

如果有人有类似的&amp;没有Maven的简单工作示例,请提供。

感谢
〜莫希特

6 个答案:

答案 0 :(得分:7)

看起来您只需将aopalliance jar添加到IDE的构建类路径(Eclipse?)。这解释了IDE显示没有错误并接受构建应用程序。但事实上,您还必须将其添加到运行类路径

根据您使用的IDE,可能允许其他菜单进行配置。但是如果你想在IDE之外运行它,你必须将jar放在普通的类路径中,或者把它放在其他现有的jar中,或者通过改变你的用户或系统类路径来包含包含的文件夹(会更好)罐子。

如果你需要并且我知道你的系统,我可以详细说明......

答案 1 :(得分:0)

与com.springsource.org.aopalliance-X.X.X.jar进行交叉检查

答案 2 :(得分:0)

您错过了依赖关系。不确定你是如何处理依赖关系的,而只是在IVY或你使用的任何东西中添加JAR。你必须使用一些东西来添加Spring 3.2。

Maven Central:link

IVY示例:<dependency org="org.springframework" name="spring-aop" rev="3.2.11.RELEASE" /> Maven还有其他相关信息。

如果这是一个Web应用程序,请确保JAR位于APPNAME / WEB-INF / lib中。

答案 3 :(得分:0)

请确保您的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中你也可以根据上面共享的依赖项下载所需的 jars

答案 4 :(得分:0)

除了aopalliance jar之外,您是否已将这些jar添加到构建路径中?

aspectjrt
springaop
aspectjweaver

如果没有,您可以尝试添加这些..

P.S:使用适当版本的罐子......

答案 5 :(得分:0)

我完全删除了SPRING-LIBRARY,然后逐个添加了所有必需的罐子加上cglib-nodep-2.2.jar。
我的代码<bean id="quest" class="com.java.spring.ResqueDamselQuest" />

中也存在拼写错误
public class RescueDamselQuest implements Quest {

班级名称。

但我确信这个拼写错误不是我得到的例外的原因。从头开始添加罐子之后,我得到了这个错误,表示没有像knights-aop.xml中提到的那样找到......某些......这就是我认为我有这个错字的时候。

这就是我现在添加罐子的方式:

enter image description here

我希望有人可以从这个答案中获得帮助。

###########编辑###########

asm-all&amp; cglib-nodep不是必需的。此外,春季下载的一些jar导致问题,因为我尝试添加我在春季下载中获得的所有罐子,并且它再次开始显示旧的异常。因此,最好在需要时添加jar。