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

运行Spring MVC应用时Tomcat启动抛出异常求助

排查并解决Spring MVC应用Tomcat启动JarResourceSet初始化异常

我来帮你排查这个Tomcat启动失败的问题,先梳理下你的场景:你在IntelliJ中开发了一个Spring MVC应用,使用的pom.xml配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.packt</groupId>
  <artifactId>webstore</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>webstore Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.0.6.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>5.0.6.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.0.6.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>5.0.6.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
    </dependency>
  </dependencies>

  <build>
    <finalName>webstore</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.0.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.7.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.20.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

启动Tomcat时出现了如下初始化异常:

16-May-2018 12:04:00.662 SEVERE [main] org.apache.catalina.core.ContainerBase.addChildInternal ContainerBase.addChild: start: 
org.apache.catalina.LifecycleException: Failed to initialize component [org.apache.catalina.webresources.JarResourceSet@33723e30]
 at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:441)
 at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:139)
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:173)
 at org.apache.catalina.webresources.StandardRoot.startInternal(StandardRoot.java:724)
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
 at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4742)
 at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4877)
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
 at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:742)
 at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:718)
 at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:703)
 at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:986)
 at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1858)
 at java.util.concurrent.Executors$RunnableAdapter.call(Ex

问题分析

这个异常的核心原因是Servlet API依赖与Tomcat自带的Servlet API发生冲突。你的pom.xml中,javax.servlet-api依赖没有指定<scope>provided</scope>,Maven会默认把这个依赖打包到WAR包中;而Tomcat服务器本身已经内置了Servlet API的实现,当Tomcat加载WAR包时,会加载到两份相同的API类,导致类加载冲突,进而触发JarResourceSet初始化失败的异常。

解决方案

修改pom.xml中的javax.servlet-api依赖,添加<scope>provided</scope>配置,标记该依赖由运行环境(Tomcat)提供,不需要打包到WAR包中:

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>4.0.1</version>
  <scope>provided</scope> <!-- 添加这一行 -->
</dependency>

后续操作

  1. 执行mvn clean install重新构建项目,清理旧的依赖包并生成新的WAR包
  2. 在IntelliJ中重新部署并启动Tomcat服务器

这样就能避免依赖冲突,解决启动异常问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:07:09