spring boot 2.0.0由於版本不匹配導致的NoSuchMethodError問題解析

weixin_34015860發表於2018-09-25

spring boot升級到2.0.0以後,專案突然報出 NoSuchMethodError: org.springframework.boot.builder.SpringApplicationBuilder.<init> 異常,

跟蹤原始碼無果的情況下。突然想到有可能是spring boot 和 spring cloud版本不匹配導致的。
於是,上官網看spring cloud的依賴,首先看Edgware.SR2版本的依賴,可以看出Edgware.SR2依賴是1.5.X版本

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.10.RELEASE</version>
</parent>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Edgware.SR2</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

再看Finchley版本的依賴,可以看出Finchley依賴的是2.0.0版本

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.0.RELEASE</version>
</parent>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Finchley.BUILD-SNAPSHOT</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

檢視官網目前最新的Finchley版本是Finchley.M8,所以對於使用spring boot2.0.0的朋友,只要將對應的spring cloud切換為Finchley.M8版本,即可解決SpringApplicationBuilder.<init>報出NoSuchMethodError的問題。下面給出大家一個spring boot版本和spring cloud版本的匹配關係:

Spring CloudSpring Boot
Finchley 相容Spring Boot 2.0.x,不相容Spring Boot 1.5.x
Dalston和Edgware 相容Spring Boot 1.5.x,不相容Spring Boot 2.0.x
Camden 相容Spring Boot 1.4.x,也相容Spring Boot 1.5.x
Brixton 相容Spring Boot 1.3.x,也相容Spring Boot 1.4.x
Angel 相容Spring Boot 1.2.x

只要按照上述表格做spring boot和spring cloud的關係匹配,就不會出現該報錯了。

相關文章