springboot2.7.16到3.5.16,srpingcloud2021.0.1->2025.0.3,jdk1.8->17,升级记录一(从踩屎坑到上岸的辛酸历程) 1、修改对应的maven版本号2、报错dependencies.dependency.version for org.apache.httpcomponents:httpclient:jar is missing.原因没有明确指定版本将 Spring Boot 从 2.7.x 升级到 3.x 版本一个关键变化是Spring Framework 6 移除了对 Apache HttpClient 4 的支持全面转向了 HttpClient 5。因此原来的org.apache.httpcomponents:httpclient和httpmime依赖属于 HttpClient 4需要被替换为 HttpClient 5 的依赖。在 Spring Boot 项目中建议优先通过导入spring-boot-dependenciesBOM 来统一管理所有 Spring 及关联依赖的版本。如果 BOM 中已定义了httpclient5的版本则可以省略version标签。3、dependencies.dependency.(groupId:artifactId:type:classifier) must be unique: com.fasterxml.jackson.core:jackson-databind:jar - duplicate declaration of version ${version.jackson.core} com.xmair:mfehome:1.0.0, D:\work\sourceCode\serviceCode\mfehome4.0-jdk17\pom.xml, line 178, column 15原因这个错误表明你的 Maven POM 文件中jackson-databind依赖被重复声明了并且在重复声明的地方其版本号使用了属性占位符${version.jackson.core}。解决移除多余的引用4、maven clean的时候报错[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project common: Fatal error compiling: 无效的标记: --release - [Help 1] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException [ERROR] [ERROR] After correcting the problems, you can resume the build with the command [ERROR] mvn args -rf :common原因这个错误表明Maven 编译器插件无法识别--release参数通常是因为JDK 版本过低或maven-compiler-plugin版本不兼容。4、报错class lombok.javac.apt.LombokProcessor (in unnamed module 0x39e75e88) cannot access class com.sun.tools.javac.processing.JavacProcessingEnvironment (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.processing to unnamed module 0x39e75e88原因Lombok 与 JDK 版本不兼容导致的。解决方案升级 Lombok 版本5、报错原因由于2修改了HttpClient 5所以需要修改包路径主要改动点包名变更org.apache.http→org.apache.hc.core5/org.apache.hc.client5.httpAPI 变化NameValuePair、Cookie、RequestConfig等类的包路径和构造方式都有变化内部类问题HttpEntityEnclosingRequestBase在 HttpClient 5 中已移除需改用其他方式6、程序包org.apache.commons.codec.binary不存在引入dependencygroupIdcommons-codec/groupIdartifactIdcommons-codec/artifactIdversion1.19.0/version/dependency7、程序包javax.servlet.http不存在修改为jakarta.servlet.http8、import sun.misc.BASE64Decoder;import sun.misc.BASE64Encoder; 提示找不到符号原因JDK 9 移除了sun.misc.BASE64Encoder和sun.misc.BASE64Decoder这些是 JDK 内部 API在 JDK 9 之后被标记为不推荐使用并最终移除。使用Base64.getEncoder()、 Base64.getDecoder()替代9、MsgStruct.java:[27,31] No property named msgId exists in source parameter(s). Did you mean messageUrl?OverrideMappings({Mapping(source msgId, target pkid),})MsgDto toDto(MfImappstatusDto entity);MfImappstatusDto extends MfImappstatus MfImappstatusDto中没有msgId,但是MfImappstatus中有这个字段问题原因MapStruct 在编译时只会扫描MfImappstatusDto自身声明的属性不会自动识别父类MfImappstatus中的字段。虽然运行时子类可以访问父类的字段但 MapStruct 的编译期检查无法看到继承的字段。10、报错Override Mappings({ Mapping(source appPkid, target mfAppPkid), Mapping(source helpInfoName, target helpinfoName), Mapping(source helpInfoUrl, target helpinfoUrl), Mapping(source helpInfoTypePkid, target mfHelpinfoTypePkid), }) MfHelpinfo toEntity(HelpInfoDto dto); Unknown property mfAppPkid in result type MfHelpinfo. Did you mean null?MfHelpinfo 有mfAppPkid只是MfHelpinfo 用Data常见原因1. Lombok 版本与 MapStruct 版本不兼容Data生成的 getter/setter 需要 MapStruct 能够识别。如果版本不兼容MapStruct 无法识别这些方法。解决方案升级 Lombok 和 MapStruct 版本properties !-- 确保使用兼容的版本 -- lombok.version1.18.32/lombok.version org.mapstruct.version1.6.3/org.mapstruct.version /properties dependencies !-- Lombok -- dependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId version${lombok.version}/version scopeprovided/scope /dependency !-- MapStruct -- dependency groupIdorg.mapstruct/groupId artifactIdmapstruct/artifactId version${org.mapstruct.version}/version /dependency dependency groupIdorg.mapstruct/groupId artifactIdmapstruct-processor/artifactId version${org.mapstruct.version}/version scopeprovided/scope /dependency /dependencies build plugins plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-compiler-plugin/artifactId version3.11.0/version configuration source17/source target17/target annotationProcessorPaths !-- Lombok 必须在 MapStruct 前面 -- path groupIdorg.projectlombok/groupId artifactIdlombok/artifactId version${lombok.version}/version /path !-- MapStruct -- path groupIdorg.mapstruct/groupId artifactIdmapstruct-processor/artifactId version${org.mapstruct.version}/version /path !-- Lombok MapStruct 绑定 -- path groupIdorg.projectlombok/groupId artifactIdlombok-mapstruct-binding/artifactId version0.2.0/version /path /annotationProcessorPaths /configuration /plugin /plugins /build