IntelliJ IDEA中Spring项目添加依赖后Tomcat无法启动求助
之前Spring项目能正常启动内嵌Tomcat并加载页面,添加以下POM依赖后Tomcat无法启动:
<properties> <java.version>11</java.version> </properties> <dependencies> <!-- Spring MVC --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Tomcat Embed --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <!-- JSTL --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency> <!-- JSP文件编译依赖 --> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>provided</scope> </dependency> <!-- 测试依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- SPRING DATA --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!-- MySQL驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> <version>5.1.47</version> </dependency> <!-- Commons-lang3 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.12.0</version> </dependency> <!-- tika-parsers --> <dependency> <groupId>org.apache.tika</groupId> <artifactId>tika-parsers</artifactId> <version>1.17</version> </dependency> <!-- 文件上传依赖 --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.4</version> </dependency> </dependencies>
可能的问题点及解决步骤
1. Tomcat依赖作用域错误
spring-boot-starter-tomcat和tomcat-embed-jasper的<scope>provided</scope>会导致本地开发时(直接运行Spring Boot主类)无法加载这些依赖——provided意味着依赖由部署容器提供,但本地用的是Spring Boot内嵌Tomcat,需要这些依赖在运行时存在。
解决: 删掉这两个依赖的<scope>provided</scope>标签,让它们默认使用compile作用域,这样内嵌Tomcat启动时能获取到必要的组件。
2. Tika-parsers版本兼容性问题
tika-parsers 1.17是2017年的旧版本,完全不支持Java 11,会引发类加载错误或兼容性异常,导致Tomcat启动失败。
解决: 升级到支持Java 11的Tika版本(建议2.x系列),同时注意Tika 2.x后artifactId已变更,替换为:
<dependency> <groupId>org.apache.tika</groupId> <artifactId>tika-parsers-standard-package</artifactId> <version>2.9.0</version> </dependency>
(可根据Spring Boot版本选择适配的Tika版本,避免依赖冲突)
3. MySQL驱动版本过旧
mysql-connector-java 5.1.47对Java 11的支持有限,可能和Spring Data JPA或Java 11的特性不兼容,引发启动时的数据库连接相关错误。
解决: 升级MySQL驱动到适配Java 11的版本,比如:
<dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <scope>runtime</scope> <version>8.0.33</version> </dependency>
(com.mysql:mysql-connector-j是MySQL官方新的groupId,替代旧的mysql:mysql-connector-java)
4. 检查依赖冲突
执行mvn dependency:tree命令查看完整依赖树,排查是否存在重复依赖或版本冲突(比如Tika可能引入旧版servlet-api,和Spring Boot的内嵌Tomcat依赖冲突)。如果发现冲突,可通过<exclusions>标签排除冲突的依赖。
内容的提问来源于stack exchange,提问作者Angello G_De la torre

