首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RequestMappingHandlerAdapter':init方法调用失败;嵌套异常为java.lang.NoSuchMethodError

RequestMappingHandlerAdapter':init方法调用失败;嵌套异常为java.lang.NoSuchMethodError
EN

Stack Overflow用户
提问于 2016-05-25 18:57:34
回答 1查看 5.7K关注 0票数 0

突然间我得到了:

代码语言:javascript
复制
[localhost-startStop-1] WARN  org.springframework.web.context.support.XmlWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter': Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.springframework.web.accept.ContentNegotiationManager.getStrategies()Ljava/util/List;
[localhost-startStop-1] ERROR org.springframework.web.servlet.DispatcherServlet - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter': Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.springframework.web.accept.ContentNegotiationManager.getStrategies()Ljava/util/List;
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)

我不知道我做了什么/改变了什么--当我启动服务器并请求我的网站时,它突然出现了。

你可以看到完全堆栈跟踪,这里有所有异常

你猜是什么导致了这一切?

My pom.xml (缩写为基本依赖项):

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <!-- ... -->

    <properties>
        <org.springframework-version>4.2.4.RELEASE</org.springframework-version>
        <org.springframework.security-version>4.0.3.RELEASE</org.springframework.security-version>
    </properties>

    <!-- ... -->

    <dependencies>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
        </dependency>

        <!-- Spring Dependencies -->

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${org.springframework-version}</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-core</artifactId>
            <version>${org.springframework.security-version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-config</artifactId>
            <version>${org.springframework.security-version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-web</artifactId>
            <version>${org.springframework.security-version}</version>
        </dependency>


        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${org.springframework.security-version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-acl</artifactId>
            <version>${org.springframework.security-version}</version>
        </dependency>

        <!-- Required by spring-security-acl -->
        <dependency>
            <groupId>net.sf.ehcache</groupId>
            <artifactId>ehcache</artifactId>
            <version>2.10.1</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${org.springframework.security-version}</version>
        </dependency>

    </dependencies>

    <profiles>
        <!-- ... -->
    </profiles>

    <build>
        <plugins>
            <!-- ... -->
        </plugins>
    </build>
</project>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-25 20:05:26

如果您曾经在项目中处理过maven以进行依赖关系管理,那么您必须至少遇到过一个问题,或者可能不止一次。问题是版本错配。通常,当您得到一些依赖项时,就会发生这种情况,这些依赖关系会将相关的依赖项与特定的版本结合在一起。如果您已经包含了具有不同版本号的那些依赖项,那么它们在编译时和运行时也可能面临不期望的结果。

理想情况下,为了避免上述问题,您需要显式地排除相关的依赖关系,但是您很可能会忘记这样做。

要解决版本不匹配问题,可以使用“物料清单”(BOM)依赖的概念。BOM依赖项跟踪版本号,并确保所有依赖项(直接依赖项和传递依赖项)都位于同一个版本。

如何添加物料清单依赖

Maven为此提供了一个标记dependencyManagement。您需要在这个标记中添加bom信息,如下所示。我以Spring文件为例。

代码语言:javascript
复制
 <dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-framework-bom</artifactId>
            <version>4.2.4.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
  </dependencyManagement>

使用BOM的另一个好处是,当依赖于构件时,不再需要指定version属性。所以它会很好的工作。

代码语言:javascript
复制
<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
    </dependency>
    <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-web</artifactId>
    </dependency>
<dependencies>

类似地,用于Spring安全的BOM是

代码语言:javascript
复制
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-bom</artifactId>
    <version>4.0.3.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

在你的例子中,它的版本错配问题,我之前也曾遇到过。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37445483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档