java.lang.NoSuchMethodError:org.springframework.core.annotation.AnnotationUtils.isInJavaLangAnnotationPackage(Ljava / lang / annotation / Annotation;)Z

对于Spring和JUnit来说,这是一个新手。 我试图为spring服务类运行一个简单的JUnit测试用例,但它失败了,我得到了这个exception。我还没有编写任何测试,但是在实现之前尝试运行。 使用tomcat v7.0。 我不认为有任何spring冲突的版本。 请帮忙。

java.lang.NoSuchMethodError: org.springframework.core.annotation.AnnotationUtils.isInJavaLangAnnotationPackage(Ljava/lang/annotation/Annotation;)Z at org.springframework.test.context.MetaAnnotationUtils.findAnnotationDescriptor(MetaAnnotationUtils.java:126) at org.springframework.test.context.MetaAnnotationUtils.findAnnotationDescriptor(MetaAnnotationUtils.java:96) at org.springframework.test.context.ContextLoaderUtils.resolveActiveProfiles(ContextLoaderUtils.java:499) at org.springframework.test.context.ContextLoaderUtils.buildMergedContextConfiguration(ContextLoaderUtils.java:722) at org.springframework.test.context.ContextLoaderUtils.buildMergedContextConfiguration(ContextLoaderUtils.java:656) at org.springframework.test.context.DefaultTestContext.(DefaultTestContext.java:93) at org.springframework.test.context.TestContextManager.(TestContextManager.java:119) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTestContextManager(SpringJUnit4ClassRunner.java:120) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.(SpringJUnit4ClassRunner.java:109) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:526) at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:29) at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:21) at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59) at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26) at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59) at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:26) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.(JUnit4TestReference.java:33) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.(JUnit4TestClassReference.java:25) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:48) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:452) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 

如果我的项目中有任何冲突的春季jar子,我还需要检查哪里? 我的pom.xml文件是:

   org.springframework spring-beans 4.0.2.RELEASE   org.springframework spring-context 4.0.2.RELEASE   org.springframework spring-context-support 4.0.2.RELEASE   org.springframework spring-core 4.0.2.RELEASE   org.springframework spring-jdbc 3.1.4.RELEASE   org.springframework.data spring-data-commons 1.5.0.RELEASE   org.springframework.data spring-data-commons-core 1.4.1.RELEASE   org.springframework spring-dao 2.0.8   org.apache.derby derby 10.10.1.1   org.apache.derby derbyclient 10.10.1.1   commons-pool commons-pool 1.6   commons-dbcp commons-dbcp 1.4   org.springframework.boot spring-boot-starter-test 1.0.0.RELEASE  

该方法出现在该提交中 ,似乎是4.0.3+。 只需将spring依赖项更新为最新版本即可。

问题是你混合了不同版本的Spring,你在项目中混合(2.0.8,3.1.4和4.0.2)。 那是等待发生的麻烦。

为了防止出现这种情况,现在可以导入所谓的“物料清单”POM 。

您需要添加dependencyManagement部分以导入bom。

    org.springframework spring-framework-bom 4.0.5.RELEASE pom import    

现在在您的依赖项中,您可以删除版本并用spring-orm替换spring-dao 。 额外的好处是,所有spring-*依赖项现在都将被管理到最新版本,并且您的版本号只有一个位置。

  org.springframework spring-beans   org.springframework spring-context   org.springframework spring-context-support   org.springframework spring-core   org.springframework spring-jdbc   org.springframework spring-orm  

您可以对Spring Data应用相同的技巧,因为它也有一个bom 。

使用spring-framework-bom.LATEST.VERSION.pom文件替换旧的jar。

那样,我解决了我的问题。

我刚刚删除了我的maven项目中的目标文件夹并重建了战争,这个问题就消失了。