2014-05-21 43 views
9

Sono molto nuovo per la primavera e JUnit. Sto cercando di eseguire un semplice caso di test JUnit per la classe di servizio di primavera, ma non riesce e ottengo questa eccezione. Non ho ancora scritto alcun test, ma ho cercato di eseguire prima di implementare. Utilizzo di tomcat v7.0. E non penso che ci siano versioni in conflitto tra primavera. Per favore aiuto.java.lang.NoSuchMethodError: org.springframework.core.annotation.AnnotationUtils.isInJavaLangAnnotationPackage (Ljava/lang/annotation/Annotation;) Z

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.<init>(DefaultTestContext.java:93) 
at org.springframework.test.context.TestContextManager.<init>(TestContextManager.java:119) 
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTestContextManager(SpringJUnit4ClassRunner.java:120) 
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.<init>(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.<init>(JUnit4TestReference.java:33) 
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.<init>(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) 

In quale altro caso devo controllare, se nel mio progetto ci sono vasi a molla in conflitto? E il mio file pom.xml è:

<dependencies> 
<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-beans</artifactId> 
    <version>4.0.2.RELEASE</version> 
</dependency> 
<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-context</artifactId> 
    <version>4.0.2.RELEASE</version> 
</dependency> 
<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-context-support</artifactId> 
    <version>4.0.2.RELEASE</version> 
</dependency> 
<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-core</artifactId> 
    <version>4.0.2.RELEASE</version> 
</dependency> 
<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-jdbc</artifactId> 
    <version>3.1.4.RELEASE</version> 
</dependency> 
<dependency> 
    <groupId>org.springframework.data</groupId> 
    <artifactId>spring-data-commons</artifactId> 
    <version>1.5.0.RELEASE</version> 
</dependency> 
<dependency> 
    <groupId>org.springframework.data</groupId> 
    <artifactId>spring-data-commons-core</artifactId> 
    <version>1.4.1.RELEASE</version> 
</dependency> 
<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-dao</artifactId> 
    <version>2.0.8</version> 
</dependency> 
<dependency> 
    <groupId>org.apache.derby</groupId> 
    <artifactId>derby</artifactId> 
    <version>10.10.1.1</version> 
</dependency> 
<dependency> 
    <groupId>org.apache.derby</groupId> 
    <artifactId>derbyclient</artifactId> 
    <version>10.10.1.1</version> 
</dependency>   
<dependency> 
    <groupId>commons-pool</groupId> 
    <artifactId>commons-pool</artifactId> 
    <version>1.6</version> 
</dependency> 
<dependency> 
    <groupId>commons-dbcp</groupId> 
    <artifactId>commons-dbcp</artifactId> 
    <version>1.4</version> 
</dependency> 

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-test</artifactId> 
    <version>1.0.0.RELEASE</version> 
</dependency> 

+2

Si sta mescolando le versioni Spring (4.0.2, 3.1.4 e 2.0.8) senza mai mescolare le versioni di un framework che presenta problemi nell'attesa che si verifichi. Nota 'spring-dap' è ora' spring-orm'. Sposta tutte le versioni su '4.0.5.RELEASE'. –

risposta

9

Tale metodo è apparso in that commit, che sembra essere 4.0.3+. Basta aggiornare le dipendenze Spring alla versione più recente.

+0

Grazie ha funzionato !! – JavaBee

19

Il problema è che si stanno mixando diverse versioni di Spring, si sta mescolando (2.0.8, 3.1.4 e 4.0.2) nel progetto. Questo è un problema in attesa che accada.

Per evitare questo tipo di cose, esiste ora un cosiddetto "bill of materials" POM che è possibile importare.

È necessario aggiungere una sezione dependencyManagement per importare il bom.

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-framework-bom</artifactId> 
      <version>4.0.5.RELEASE</version> 
      <type>pom</type> 
      <scope>import</scope> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 

Ora nelle vostre dipendenze è possibile rimuovere la versione e sostituirlo con spring-daospring-orm. È stato aggiunto il vantaggio che tutte le dipendenze spring * sono ora gestite all'ultima versione e che il numero di versione è unico.

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-beans</artifactId> 
</dependency> 
<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-context</artifactId> 
</dependency> 
<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-context-support</artifactId> 
</dependency> 
<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-core</artifactId> 
</dependency> 
<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-jdbc</artifactId> 
</dependency> 
<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-orm</artifactId> 
</dependency> 

Si potrebbe applicare lo stesso trucco per dati primavera come che ha anche un bom.

+0

Accetto! Causato dall'avere diverse versioni di Spring. – coderz

0

Sostituisci i vecchi vasi con quelli nuovi in ​​base al file spring-framework-bom.LATEST.VERSION.pom.

In questo modo, ho risolto il problema.

0

Ho appena eliminato la cartella di destinazione nel mio progetto di maven e ho ricostruito la guerra e questo problema è scomparso.

Problemi correlati