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

Spring Boot项目在IntelliJ正常运行,gradle bootRun报NoSuchMethodError

Spring Boot项目IDEA运行正常但gradle bootRun抛NoSuchMethodError异常

我的Spring Boot项目在IntelliJ IDEA中运行完全正常,但使用gradle bootRun命令运行时,编译通过但执行阶段抛出NoSuchMethodError异常。

build.gradle内容

plugins {
    id 'org.springframework.boot' version '2.6.3'
    id 'io.spring.dependency-management' version '1.0.12.RELEASE'
    id 'java'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = "16"

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'com.github.salesforce-marketingcloud:fuelsdk:1.6.0'

    implementation 'org.springframework.boot:spring-boot-starter-web:2.7.2'
    compileOnly 'org.projectlombok:lombok:1.18.24'
    developmentOnly 'org.springframework.boot:spring-boot-devtools:2.7.2'
    annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor:2.7.2'
    annotationProcessor 'org.projectlombok:lombok:1.18.24'

    testImplementation 'org.springframework.boot:spring-boot-starter-test:2.7.2'
}

tasks.named('test') {
    useJUnitPlatform()
}
targetCompatibility = JavaVersion.VERSION_16

错误堆栈信息

java.lang.NoSuchMethodError: 'org.codehaus.stax2.ri.EmptyIterator org.codehaus.stax2.ri.EmptyIterator.getInstance()'
    at com.ctc.wstx.sw.OutputElementBase.getPrefixes(OutputElementBase.java:358) ~[woodstox-core-asl-4.4.1.jar:4.4.1]
    at org.apache.cxf.staxutils.StaxUtils.writeStartElement(StaxUtils.java:789) ~[cxf-core-3.1.2.jar:3.1.2]
    at org.apache.cxf.staxutils.StaxUtils.copy(StaxUtils.java:737) ~[cxf-core-3.1.2.jar:3.1.2]
    at org.apache.cxf.staxutils.StaxUtils.copy(StaxUtils.java:701) ~[cxf-core-3.1.2.jar:3.1.2]
    at org.apache.cxf.staxutils.StaxUtils.copy(StaxUtils.java:625) ~[cxf-core-3.1.2.jar:3.1.2]
    at org.apache.cxf.interceptor.AbstractLoggingInterceptor.writePayload(AbstractLoggingInterceptor.java:168) ~[cxf-core-3.1.2.jar:3.1.2]
    at org.apache.cxf.interceptor.LoggingOutInterceptor$LoggingCallback.onClose(LoggingOutInterceptor.java:249) ~[cxf-core-3.1.2.jar:3.1.2]
    at org.apache.cxf.io.CachedOutputStream.close(CachedOutputStream.java:209) ~[cxf-core-3.1.2.jar:3.1.2]
    at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56) ~[cxf-core-3.1.2.jar:3.1.2]
    at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:652) ~[cxf-rt-transports-http-3.1.2.jar:3.1.2]
    at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62) ~[cxf-core-3.1.2.jar:3.1.2]
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308) ~[cxf-core-3.1.2.jar:3.1.2]
    at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:514) ~[cxf-core-3.1.2.jar:3.1.2]
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:423) ~[cxf-core-3.1.2.jar:3.1.2]
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:324) ~[cxf-core-3.1.2.jar:3.1.2]
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:277) ~[cxf-core-3.1.2.jar:3.1.2]
    at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:96) ~[cxf-rt-frontend-simple-3.1.2.jar:3.1.2]
    at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:139) ~[cxf-rt-frontend-jaxws-3.1.2.jar:3.1.2]
    at jdk.proxy3/jdk.proxy3.$Proxy88.retrieve(Unknown Source) ~[na:na]
    at com.exacttarget.fuelsdk.ETSoapObject.retrieve(ETSoapObject.java:350) ~[fuelsdk-1.6.0.jar:na]
    at com.exacttarget.fuelsdk.ETSoapObject.retrieve(ETSoapObject.java:173) ~[fuelsdk-1.6.0.jar:na]
    at com.exacttarget.fuelsdk.ETSoapObject.retrieve(ETSoapObject.java:149) ~[fuelsdk-1.6.0.jar:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
    at com.exacttarget.fuelsdk.ETClient.retrieve(ETClient.java:630) ~[fuelsdk-1.6.0.jar:na]
    at com.exacttarget.fuelsdk.ETClient.retrieve(ETClient.java:569) ~[fuelsdk-1.6.0.jar:na]
    at com.example.sfmcbackend.service.DERetrievalService.getDataExtensionByName(DERetrievalService.java:18) ~[main/:na]

我已检查编译和运行时的classpath,所有依赖项(包括引发错误的依赖)均已存在。


解决方案

这个问题是依赖版本冲突导致的:woodstox-core-asl:4.4.1需要匹配特定版本的stax2-api,但项目中可能被Spring Boot的依赖管理引入了不兼容的版本,导致EmptyIterator.getInstance()方法找不到。

步骤1:确认依赖冲突

执行以下命令查看项目依赖树,找到stax2-api的版本:

gradle dependencies

你会发现可能存在多个版本的stax2-api,比如Spring Boot可能引入了更高版本,和woodstox-core-asl:4.4.1不兼容。

步骤2:强制指定兼容版本

woodstox-core-asl:4.4.1对应的兼容stax2-api版本是3.1.4,在build.gradle中添加以下依赖来强制指定:

dependencies {
    // 其他依赖...
    implementation 'org.codehaus.woodstox:stax2-api:3.1.4'
}

或者通过依赖管理块统一控制版本:

dependencyManagement {
    dependencies {
        dependency 'org.codehaus.woodstox:stax2-api:3.1.4'
    }
}

步骤3:验证修复

重新执行gradle bootRun,确认异常是否消失。如果还有问题,可以检查是否有其他依赖引入了冲突的woodstox版本,通过exclude排除:
比如如果spring-boot-starter-web引入了jackson的xml依赖带来冲突,可以排除:

implementation('org.springframework.boot:spring-boot-starter-web:2.7.2') {
    exclude group: 'com.fasterxml.jackson.dataformat', module: 'jackson-dataformat-xml'
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 07:36:34