You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 3.4.2升级后测试类执行失败求助

问题:Spring Boot 3.4.2升级后测试用例执行失败(NoSuchMethodError)

我已将Spring Boot版本升级至id 'org.springframework.boot' version '3.4.2',同步更新了所有依赖。由于3.4.X版本中@MockBean已废弃,我将测试代码中的@MockBean替换为@MockitoBean,但测试用例仍执行失败,报错信息如下:

java.lang.NoSuchMethodError: 'java.util.LinkedHashSet org.springframework.util.CollectionUtils.newLinkedHashSet(int)' 
at org.springframework.test.context.TestContextManager.(TestContextManager.java:95) 
at org.springframework.test.context.junit.jupiter.SpringExtension.getTestContextManager(SpringExtension.java:363) 
at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:158) 
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) 
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) 
at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) 
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) 
at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1708) 
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) 
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) 
at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) 
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174) 
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) 
at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) 
at java.base/java.util.Optional.orElseGet(Optional.java:364) 
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)

项目的build.gradle配置如下:

plugins { 
    id 'org.springframework.boot' version '3.4.2' 
    id 'io.spring.dependency-management' version '1.1.6' 
    id 'java' 
    id 'jacoco' 
    id 'org.sonarqube' version '5.1.0.4882' 
    id 'maven-publish' 
    id 'com.gorylenko.gradle-git-properties' version '2.4.2' 
    id 'io.freefair.lombok' version '8.10' 
} 

group = 'com.edwardjones' 
version = 'VERSION_NUMBER' 

java { 
    sourceCompatibility = JavaVersion.VERSION_17 
} 

repositories { 
    maven { 
        url 'http://maven.edj.devjones.com:8181/artifactory/repo' 
        allowInsecureProtocol = true 
    } 
    //temporarily added to resolve dependency resolution issue for jboss-logging 3.5.1.Final 
    maven { 
        url 'http://repository.edwardjones.com:8181/artifactory/libs-release/' 
        allowInsecureProtocol = true 
    } 
} 

configurations.all { 
    exclude group: "org.bouncycastle", module: "bcpkix-jdk15on" 
    exclude group: 'ch.qos.reload4j' 
} 

ext['spring-security-config.version']= '6.3.4' 
ext['hazelcastVersion']= '5.3.6' 

dependencies { 
    //Crm-cluster-starter - Retry, DLT & Circuit Breaker for pause/Resume 
    implementation 'com.edwardjones.crm:crm-kafka-cluster-starter:1.1.1' 
    implementation 'org.springframework.boot:spring-boot-starter' 
    implementation 'org.springframework.boot:spring-boot-starter-actuator' 
    implementation 'org.springframework.boot:spring-boot-starter-validation' 
    implementation 'org.springframework.boot:spring-boot-starter-web' 
    implementation 'org.springframework.security:spring-security-config' 
    implementation 'org.springframework:spring-aspects' 


    //EJ framework 
    implementation 'com.edwardjones.framework:frm-slf4j' 
    implementation 'com.edwardjones.framework:frm-stats' 
    implementation 'com.edwardjones.framework:frm-spring-boot-starter-rest-server' 
    implementation 'com.edwardjones.framework:frm-spring-boot-starter-security' 
    implementation 'com.edwardjones.security:wam-auth-password' 
    implementation 'com.edwardjones.framework:frm-spring-rest-client' 

    implementation 'org.springframework:spring-webmvc:7.0.0-M1' 
    implementation "org.springframework:spring-webflux:7.0.0-M1"          //Fix CVE-2024-38816 
    // CVE-2024-38810 
    implementation 'org.springframework.security:spring-security-core:6.4.2' 

    // bsd logging 
    implementation 'com.edwardjones.bsd:bsd-error-logging:2.0.0' 

    // Swagger OpenAPI 
    implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0' 

    // HTTP Components 
    implementation 'org.apache.httpcomponents.core5:httpcore5:5.3.3' 
    implementation 'org.apache.httpcomponents.client5:httpclient5:5.4.2' 


    // Hashicorp Vault 
    implementation 'org.springframework.cloud:spring-cloud-starter-vault-config:4.2.0' 
    implementation 'org.apache.httpcomponents.client5:httpclient5:5.4.2' 

    // Needed to patch snakeyaml:1.3.3 vulnerability in dependencies 
    implementation 'org.yaml:snakeyaml:2.3' 
    // Needed to patch json-smart vulnerability 
    implementation 'com.jayway.jsonpath:json-path:2.9.0' 
    implementation 'com.nimbusds:oauth2-oidc-sdk:11.21.3' 
    implementation 'io.netty:netty-handler:5.0.0.Alpha2' 
    implementation 'io.netty:netty-codec:5.0.0.Alpha2' 
    implementation 'io.netty:netty-codec-http2:5.0.0.Alpha2' 
    implementation 'org.xerial.snappy:snappy-java:1.1.10.5' 
    implementation 'io.projectreactor.netty:reactor-netty-http:1.1.13' 

    /** timestamp interceptor **/ 
    implementation ('io.confluent:timestamp-interceptor:7.6.1'){ 
        exclude group: 'io.swagger.core.v3' 
        exclude group: 'org.eclipse.jetty' 
        exclude group: 'com.google.protobuf' , module:'protobuf-java' 
        exclude group: 'io.netty', module:'netty-common' 
    } 

    //resilience4j 
    implementation 'org.springframework.boot:spring-boot-starter-aop' 
    implementation 'io.github.resilience4j:resilience4j-spring-boot3' 
    implementation 'io.github.resilience4j:resilience4j-annotations' 
    implementation 'io.github.resilience4j:resilience4j-all' 
    implementation 'org.springframework.cloud:spring-cloud-stream' 
    implementation 'org.springframework.cloud:spring-cloud-function-context' 
    implementation 'org.springframework.cloud:spring-cloud-stream-binder-kafka' 

    // Hazelcast 
    implementation "org.springframework.session:spring-session-hazelcast" 
    implementation "com.hazelcast:hazelcast:${hazelcastVersion}" 
    implementation "com.hazelcast:hazelcast-spring:${hazelcastVersion}" 
    testImplementation "com.hazelcast:hazelcast:${hazelcastVersion}:tests" 

    //CVE-2024-7254 
    implementation 'com.google.protobuf:protobuf-java:4.27.5' 
    //CVE-2021-47621 
    implementation 'io.github.classgraph:classgraph:4.8.112' 

    //CVE-2024-47561 
//  implementation 'org.apache.avro:avro:1.11.4' 

    //CVE-2024-38821 
    implementation 'org.springframework.security:spring-security-web:6.3.4' 

    //CVE-2024-47535 
    implementation 'io.netty:netty-common:4.1.115.Final' 

    // CVE-2024-52317 
    implementation 'org.apache.tomcat.embed:tomcat-embed-core:11.0.2' 

    //CVE-2024-38820 
    implementation 'org.springframework:spring-context:6.1.14' 
    implementation 'org.springframework:spring-web:6.1.14' 
    implementation 'org.springframework:spring-core:6.1.14' 

    //CVE-2024-38827 
    implementation 'org.springframework:spring-expression:6.1.14' 
    implementation 'org.springframework:spring-beans:6.1.14' 



    runtimeOnly 'org.springframework.boot:spring-boot-devtools:3.4.2' 
    compileOnly "jakarta.servlet:jakarta.servlet-api:6.1.0" 
    testCompileOnly "jakarta.servlet:jakarta.servlet-api:6.1.0" 

    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' 
    testImplementation 'org.springframework.boot:spring-boot-starter-test:3.4.2', 
            'org.springframework.security:spring-security-test:6.4.2', 
            'org.springframework.kafka:spring-kafka-test:3.3.2', 
            'org.awaitility:awaitility:4.2.2' 

} 

dependencyManagement { 
    imports { 
        mavenBom 'com.edwardjones.framework:frm-framework-dependencies:4.3.0' 
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:2023.0.3" 
    } 
} 

springBoot { 
    buildInfo() 
} 

jar { 
    enabled = false 
} 

publishing { 
    publications { 
        mavenJava(MavenPublication) { 
            artifact bootJar 
        } 
    } 
} 

jacocoTestReport { 
    dependsOn test // tests are required to run before generating the report 
    reports { 
        xml.required = true 
    } 
} 

test { 
    useJUnitPlatform() 
    finalizedBy jacocoTestReport 
} 

sonarqube {
    properties {
        property "sonar.exclusions", "**/com/edwardjones/cap/fundtrades/producer/config/OpenApiConfig.java"
//            use this property for to run sonar on local
//            property "sonar.host.url", http://nldasonar-2.edj.devjones.com:9010
    }
}
解决方案
  • 核心问题:Spring版本依赖冲突
    报错NoSuchMethodError说明运行时类路径中存在不同版本的Spring核心库,CollectionUtils.newLinkedHashSet(int)方法仅在Spring 6.2+(对应Spring Boot 3.4.x)中存在,但你的配置硬编码了多个Spring核心组件为6.1.14版本,导致版本不兼容。同时引入的Spring WebMVC/WebFlux 7.0.0-M1里程碑版本与Spring Boot 3.4.2完全不匹配。

  • 修复步骤:

    1. 移除硬编码的Spring核心组件版本:删除以下依赖,让Spring Boot的依赖管理自动控制适配版本:
      //CVE-2024-38820
      implementation 'org.springframework:spring-context:6.1.14'
      implementation 'org.springframework:spring-web:6.1.14'
      implementation 'org.springframework:spring-core:6.1.14'
      
      //CVE-2024-38827
      implementation 'org.springframework:spring-expression:6.1.14'
      implementation 'org.springframework:spring-beans:6.1.14'
      
    2. 删除不兼容的Spring WebMVC/WebFlux版本:移除以下两行里程碑版本依赖,Spring Boot starter会自动引入适配的web组件版本:
      implementation 'org.springframework:spring-webmvc:7.0.0-M1'
      implementation "org.springframework:spring-webflux:7.0.0-M1"
      
    3. 统一Spring Security版本:Spring Boot 3.4.2对应Spring Security 6.4.x,修改ext配置统一版本,并移除硬编码的单个组件依赖:
      ext['spring-security-config.version']= '6.4.2'
      
      同时删除spring-security-core:6.4.2和spring-security-web:6.3.4,让依赖管理自动处理版本。
    4. 清理并重建项目:执行gradle clean build --refresh-dependencies刷新依赖缓存,确保所有依赖版本统一。
  • 额外建议:

    • 优先使用Spring Boot的starter和依赖管理机制,避免硬编码单个Spring组件版本,减少冲突风险。
    • 修复CVE时优先通过升级Spring Boot版本解决,而非单独升级单个组件,Spring Boot会确保所有组件版本兼容。

内容的提问来源于stack exchange,提问作者Nandini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 13:05:56