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

Spring Boot WAR包命令行启动失败,内嵌Tomcat依赖冲突求助

解决Spring Boot WAR启动时Tomcat依赖冲突问题

看起来你碰到了Spring Boot内嵌Tomcat和Google OAuth依赖冲突的典型问题,这个NoSuchMethodError本质是JVM加载了错误版本的Tomcat类,导致找不到对应的方法。下面是具体的分析和解决步骤:

问题根源

Spring Boot 1.5.9.RELEASE默认依赖的Tomcat版本是8.5.23,而你的google-oauth-client-jetty依赖里包含了Jetty容器相关的类,这些类和内嵌Tomcat的类产生了冲突;另外可能存在间接引入的低版本Tomcat类,导致StandardJarScanner的方法不匹配。

具体解决方案

1. 修正Jetty依赖的排除规则

你之前尝试排除Jetty但写错了groupId,Jetty的官方groupId是org.eclipse.jetty,修改google-oauth-client-jetty的依赖配置,彻底排除Jetty相关组件:

<dependency>
    <groupId>com.google.oauth-client</groupId>
    <artifactId>google-oauth-client-jetty</artifactId>
    <version>1.23.0</version>
    <exclusions>
        <exclusion>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>*</artifactId>
        </exclusion>
        <exclusion>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
        </exclusion>
    </exclusions>
</dependency>

这样就能避免Jetty和Tomcat容器的冲突。

2. 锁定Tomcat版本确保一致性

在pom.xml的<properties>节点添加Tomcat版本,和Spring Boot 1.5.9对应的版本保持一致,防止其他依赖引入不同版本的Tomcat类:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <tomcat.version>8.5.23</tomcat.version>
</properties>

3. 排查依赖树定位冲突

执行Maven命令查看依赖树,精准找到引入冲突Tomcat类的依赖:

mvn dependency:tree -Dverbose -Dincludes=org.apache.tomcat

根据输出结果,找到冲突的依赖项,然后针对性地排除它。

4. 重新打包验证

修改完成后,执行打包命令:

mvn clean package

再用java -jar myApp.war启动应用,检查报错是否消失。

额外方案:改用外部Tomcat(如果不需要内嵌容器)

如果你的应用最终要部署到外部Tomcat服务器,可以直接排除内嵌Tomcat依赖,避免容器冲突:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>

这样打包后的WAR可以直接部署到外部Tomcat,无需用java -jar启动。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:37:33