2012-03-17 18 views
5

Nonostante questo progetto di aver lavorato per me per un po ', ora sto ottenendo un'eccezione quando si tenta di distribuire il mio contesto di applicazione in Tomcat:Spring MVC - Perché l'eccezione NoSuchMethodError durante la distribuzione del contesto?

Servlet /testapp threw load() exception 
java.lang.NoSuchMethodError: org.springframework.core.convert.converter.ConverterRegistry.addConverter(Ljava/lang/Class;Ljava/lang/Class;Lorg/springframework/core/convert/converter/Converter;)V 
    at org.springframework.core.convert.support.DefaultConversionService.addScalarConverters(DefaultConversionService.java:62) 

Da quello che ho letto, questo può accadere se non ci sono più versioni di Spring che vengono compilate nell'app. Tuttavia, ho completamente cancellato il mio repository locale di dipendenze per confermare che ho solo la versione che voglio nel mio percorso di compilazione. Le mie dipendenze sono i seguenti:

<properties> 
    <java-version>1.6</java-version> 
    <org.springframework.version>3.1.0.RELEASE</org.springframework.version> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
    </properties> 

    <dependencies> 
    <!-- CGLIB, only required and used for @Configuration usage --> 
    <dependency> 
     <groupId>cglib</groupId> 
     <artifactId>cglib-nodep</artifactId> 
     <version>2.2.2</version> 
    </dependency> 
    <!-- Test --> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.10</version> 
     <scope>test</scope> 
    </dependency> 
    <!-- @Inject --> 
    <dependency> 
     <groupId>javax.inject</groupId> 
     <artifactId>javax.inject</artifactId> 
     <version>1</version> 
    </dependency> 

    <dependency> 
     <groupId>org.codehaus.jackson</groupId> 
     <artifactId>jackson-core-asl</artifactId> 
     <version>1.9.4</version> 
    </dependency> 
    <dependency> 
     <groupId>org.codehaus.jackson</groupId> 
     <artifactId>jackson-mapper-asl</artifactId> 
     <version>1.9.4</version> 
    </dependency> 

    <dependency> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-eclipse-plugin</artifactId> 
     <version>2.8</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
     <version>${org.springframework.version}</version> 
     <optional>false</optional> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>servlet-api</artifactId> 
     <version>2.5</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet.jsp</groupId> 
     <artifactId>jsp-api</artifactId> 
     <version>2.1</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>jstl</artifactId> 
     <version>1.2</version> 
    </dependency> 
    </dependencies> 

non ho errori di compilazione nel progetto Eclipse e si costruisce perfettamente, senza avvisi o errori. Tuttavia, Tomcat sta marcando il mio singolo servlet di test non disponibile e quando eseguo il tail dei log, lo stacktrace sopra è il mio unico suggerimento.

Qualsiasi aiuto che chiunque può offrire sarebbe molto apprezzato. La mia esperienza con Spring and Spring MVC è minima, quindi spero che questo sia semplicemente un problema da principiante che mi è completamente sfuggito.

+2

La prima cosa che faccio quando inizio a vedere errori misteriosi è eliminare la directory di lavoro di Tomcat ... vale la pena provare – nickdos

+0

Consiglio eccellente! Questo mi ha aiutato a identificare il problema, grazie mille! – mchandler

risposta

2

Grazie a @nickdos per aver offerto un consiglio. Le modifiche al mio pom.xml che inizialmente mi hanno causato problemi sono state rimosse e l'eliminazione del mio elenco di lavoro mi ha riportato in vita. Tuttavia, il mio problema iniziale era il risultato di conflitti introdotti includendo i barattoli di Jersey nel mio progetto.

Il mio progetto utilizzava Spring v3.x, ma i jar di Jersey includevano una dipendenza da Spring 2.5, causando conflitti. Per rimediare a questo problema, ho dichiarato alcune esclusioni come segue:

<dependency> 
    <groupId>com.sun.jersey</groupId> 
    <artifactId>jersey-server</artifactId> 
    <version>${com.sun.jersey.version}</version> 
</dependency> 
<dependency> 
    <groupId>com.sun.jersey</groupId> 
    <artifactId>jersey-client</artifactId> 
    <version>${com.sun.jersey.version}</version> 
</dependency> 
<dependency> 
    <groupId>com.sun.jersey</groupId> 
    <artifactId>jersey-json</artifactId> 
    <version>${com.sun.jersey.version}</version> 
</dependency> 
<dependency> 
    <groupId>com.sun.jersey.contribs</groupId> 
    <artifactId>jersey-spring</artifactId> 
    <version>${com.sun.jersey.version}</version> 
    <exclusions> 
     <exclusion> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring</artifactId> 
     </exclusion> 
     <exclusion> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-core</artifactId> 
     </exclusion> 
     <exclusion> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-web</artifactId> 
     </exclusion> 
     <exclusion> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-beans</artifactId> 
     </exclusion> 
     <exclusion> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 

Il commento da @nickdos portato il mio progetto indietro fino alla velocità senza l'inclusione di Jersey, e dichiarando le esclusioni, ora ho il supporto per entrambi primavera MVC e supporto REST di Jersey senza l'eccezione load() che stavo riportando prima.

Grazie a tutti!

Problemi correlati