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

部署WAR包至Tomcat7.0.57时遭遇NoSuchMethodError问题求助

解决Spring Boot WAR部署到Tomcat 7.0.57的NoSuchMethodError问题

这个错误的核心原因是Tomcat版本冲突:你的项目里依赖了Tomcat 7.0.82的嵌入式组件,但部署的服务器是Tomcat 7.0.57,两个版本中org.apache.tomcat.util.res.StringManager的getManager方法签名不一致,导致运行时找不到对应方法。再加上Spring Boot默认的嵌入式Tomcat依赖会打包进WAR,和外部Tomcat的类库冲突,才触发了这个异常。

下面是具体的修复步骤,直接修改你的build.gradle即可:

修改后的build.gradle配置

buildscript { 
    repositories { mavenCentral() } 
    dependencies { 
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.1.10.RELEASE") 
    } 
} 

group 'batch' 
version '1.0-SNAPSHOT' 

apply plugin: 'java' 
apply plugin: 'spring-boot' 
apply plugin: 'war' 

bootRun { 
    addResources = true 
} 

war { 
    baseName = 'Batch' 
    version = '0.1.0' 
    // 移除手动指定的Main-Class,Spring Boot插件会自动处理
} 

jar { 
    manifest { 
        attributes 'Main-Class': 'src.main.java.com.Application' 
    } 
} 

sourceCompatibility = 1.7 
targetCompatibility = 1.7 

repositories { mavenCentral() } 

dependencies { 
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '1.1.10.RELEASE' 
    compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.24' 
    compile group: 'org.json', name: 'json', version: '20180130' 
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa', version: '1.1.10.RELEASE' 
    compile group: 'javax.servlet', name: 'jstl', version: '1.2' 
    // 把tomcat-embed-jasper版本改成和服务器一致的7.0.57
    compile group: 'org.apache.tomcat.embed', name: 'tomcat-embed-jasper', version: '7.0.57' 
    // 将嵌入式Tomcat依赖设为providedRuntime,打包时不包含,由外部Tomcat提供
    providedRuntime group: 'org.springframework.boot', name: 'spring-boot-starter-tomcat', version: '1.1.10.RELEASE' 
    //compile group: 'net.sourceforge.tess4j', name: 'tess4j', version: '4.0.2' 
    //compile group: 'org.apache.poi', name: 'poi', version: '3.9' 
} 

关键修改说明

  1. 调整spring-boot-starter-tomcat的依赖范围:用providedRuntime替代compile,这样打包时不会把嵌入式Tomcat的类打进WAR包,避免和外部Tomcat的类库冲突。本地开发时这个依赖依然会被加载,不影响你在IntelliJ里运行项目。
  2. 统一Tomcat组件版本:把tomcat-embed-jasper的版本从7.0.82改成7.0.57,和你部署的服务器版本完全一致,保证API签名匹配,解决NoSuchMethodError的根本问题。
  3. 移除多余的Main-Class配置:Spring Boot的war插件会自动生成符合外部Tomcat部署要求的MANIFEST配置,手动指定的Main-Class不仅没用,还可能导致启动异常。

额外注意事项

  • 修改完成后,先执行clean任务清理旧的构建文件,再重新执行bootRepackage打包WAR。
  • 部署前确保Tomcat 7.0.57的webapps目录下没有旧的项目残留,避免缓存问题。

内容的提问来源于stack exchange,提问作者Explain Down Vote

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:02:57