Spring MVC. Почему возникает исключение NoSuchMethodError при развертывании контекста? - PullRequest
5 голосов
/ 18 марта 2012

Несмотря на то, что этот проект работал для меня некоторое время, теперь я получаю исключение при попытке развернуть контекст своего приложения в Tomcat:

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 отмечает, что мой единственный сервлет тестирования недоступен, и когда я отслеживаю журналы, приведенная выше трассировка стека является моей единственной подсказкой.

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

1 Ответ

2 голосов
/ 18 марта 2012

Спасибо @nickdos за предложение чаевых.Изменения в моем файле pom.xml, которые изначально вызывали у меня проблемы, были удалены, а очистка моего рабочего каталога вернула меня к жизни.Однако моя первоначальная проблема была вызвана конфликтами, вызванными включением банок Jersey в мой проект.

Мой проект использовал Spring v3.x, но в банках Jersey была зависимость от 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, так и поддержка Jersey REST без исключения load (), о котором я сообщал ранее.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...