2012-03-17 4 views
5

Несмотря на этот проект проработав для меня какое-то время, сейчас я получаю исключение при попытке развернуть свой контекст приложения в Tomcat:Spring MVC - Почему исключение NoSuchMethodError при развертывании контекста?

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) 

Из того, что я читал, это может произойти, если это несколько версий Spring, которые компилируются в приложении. Тем не менее, я полностью очистил свой локальный репозиторий зависимостей, чтобы подтвердить, что у меня есть только версия, которую я хочу в своем пути сборки. Мои зависимости заключаются в следующем:

<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> 

У меня нет ошибок компилятора в проекте Eclipse, и он строит отлично, без каких-либо предупреждений или ошибок. Тем не менее, Tomcat отмечает мой единственный тестовый сервлет недоступен, и когда я заканчиваю журналы, stacktrace выше - мой единственный намек.

Любая помощь, которую может предложить любой, была бы весьма признательна. Мой опыт с Spring и Spring MVC минимален, поэтому я надеюсь, что это просто проблема новичков, которая полностью ускользнула от меня.

+2

Первое, что я делаю, когда начинаю видеть таинственные ошибки, - это очистить рабочий каталог tomcat ... стоит попробовать – nickdos

+0

Отличный совет! Это помогло мне определить проблему, спасибо огромное! – mchandler

ответ

2

Благодаря @nickdos за предложение наконечника. Изменения в моем pom.xml, которые изначально вызвали у меня проблемы, были удалены, и очистка моего рабочего каталога привела меня к жизни. Тем не менее, моя первоначальная проблема была связана с конфликтами, введенными с включением банок «Джерси» в мой проект.

Мой проект использовал Spring v3.x, но банки Джерси включали зависимость от Spring 2.5, что приводило к конфликтам. Чтобы решить эту проблему, я объявил некоторые исключения следующим образом:

<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> 

Комментарий от @nickdos принес мой проект обратно до скорости без включения Джерси, и объявив исключения, у меня теперь есть поддержка как Spring MVC, а также поддержка Джерси REST без исключения load(), о котором я сообщал ранее.

Спасибо всем!

Смежные вопросы