升级Spring Boot版本后IntelliJ及Maven编译报错:无法识别@Service注解
解决Spring Boot升级后@Service注解未知的问题
看起来你在升级Spring Boot版本时踩了依赖兼容的坑,@Service注解找不到本质是spring-context相关依赖没正确引入或者版本冲突,下面是一步步的解决思路:
一、先搞定版本兼容性(核心前提)
Spring Boot和Spring Cloud、Java版本有严格的对应关系,乱升级很容易出问题:
- 如果想继续用Java 11:最高只能升级到Spring Boot 2.7.x(这是支持Java 11的最后一个2.x稳定分支),对应的Spring Cloud版本是
2021.0.x(代号Jubilee)。 - 如果要升级到最新的Spring Boot 3.x:必须把Java版本升到17+,对应的Spring Cloud版本是
2023.0.x(代号Leyton)。
二、修改pom.xml的关键配置
情况1:升级到Spring Boot 2.7.x(保留Java 11)
修改parent和Spring Cloud版本,同时移除手动指定的旧版本依赖(让parent统一管理版本,避免不一致):
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.18</version> <!-- 2.x最新稳定版 --> <relativePath/> </parent> <properties> <java.version>11</java.version> <spring-cloud.version>2021.0.8</spring-cloud.version> <!-- 适配2.7.x的Spring Cloud版本 --> <!-- 其他原有属性保留 --> </properties> <!-- 移除spring-boot-configuration-processor的手动version,交给parent管理 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
情况2:升级到Spring Boot 3.x(需Java 17)
除了版本号,还要替换一些不兼容的旧依赖:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.2.3</version> <!-- 3.x最新稳定版 --> <relativePath/> </parent> <properties> <java.version>17</java.version> <spring-cloud.version>2023.0.1</spring-cloud.version> <!-- 适配3.2.x的Spring Cloud版本 --> <!-- 其他原有属性保留 --> </properties> <!-- 替换hibernate-types-52为hibernate-types-60(适配Spring Boot 3.x默认的Hibernate 6.x) --> <dependency> <groupId>com.vladmihalcea</groupId> <artifactId>hibernate-types-60</artifactId> <version>2.21.1</version> </dependency> <!-- 升级jjwt到兼容版本(旧版0.9.0和Spring Boot 3.x不兼容) --> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-api</artifactId> <version>0.11.5</version> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-impl</artifactId> <version>0.11.5</version> <scope>runtime</scope> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-jackson</artifactId> <version>0.11.5</version> <scope>runtime</scope> </dependency> <!-- 移除spring-boot-configuration-processor的手动version --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
三、清理缓存并重新构建
- 执行Maven命令强制更新依赖并构建:
mvn clean install -U - 清理IntelliJ缓存:
点击File -> Invalidate Caches...,选择Invalidate and Restart,让IDE重新加载依赖。
四、排查依赖冲突(如果还没解决)
如果问题依旧,执行下面的命令查看依赖树,排查是否有旧版本的spring-context被意外引入:
mvn dependency:tree | grep spring-context
如果发现冲突,在对应的依赖中添加排除规则:
<dependency> <!-- 产生冲突的依赖 --> <groupId>xxx</groupId> <artifactId>xxx</artifactId> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> </exclusion> </exclusions> </dependency>
内容的提问来源于stack exchange,提问作者Davout
相关产品推荐
相关产品推荐

