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

堆栈跟踪:

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.(ClassPathXmlApplicationContext.java:139) at org.springframework.context.support.ClassPathXmlApplicationContext.(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 

配置xml

        <!---->    <!---->  <!---->  <!---->    

我的主要课程:

 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,但错误不会消失。

SO上有类似的问题: spring嵌套exception是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。 除非没有Spring AOP,否则请不要提供Maven相关的解决方案。
项目快照:
在此处输入图像描述
在SPRING LIBRARY里面我有所有用Spring下载的jar。 是否有可能某些弹簧特定的jar子与aopalliance jar相冲突?

如果有人在没有Maven的情况下有一些类似且简单的工作示例,请提供。

谢谢
〜莫希特

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

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

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

与com.springsource.org.aopalliance-XXXjar交叉检查

完全确定pom.xml文件中包含以下内容:

  org.springframework spring-aop ${springframework.version}  

根据您的错误堆栈跟踪。

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

以下是强制性的

  org.aspectj aspectjrt ${aspectj.version}   org.aspectj aspectjweaver ${aspectj.version}  

当然,您必须为Spring和AOP设置或配置每个版本。

我后来确实意识到你没有使用Maven,即使在Maven Central Repository中你可以根据我上面共享的依赖项下载所需的jar

除了aopalliance jar你有没有把这些jar子添加到你的构建路径?

aspectjrt
springaop
aspectjweaver

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

PS:使用适当版本的jar子……

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

Maven Central: 链接

IVY示例: Maven有其他依赖信息可用。

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

我完全删除了SPRING-LIBRARY,然后逐个添加了所有必需的jar子加上cglib-nodep-2.2.jar。
我的代码中也存在拼写错误

 public class RescueDamselQuest implements Quest { 

class级名称。

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

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

在此处输入图像描述

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

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

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