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不存在
引入
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.19.0</version>
</dependency>
7、程序包javax.servlet.http不存在
修改为jakarta.servlet.http
8、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"?
@Override
@Mappings({
@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.version>1.18.32</lombok.version> <org.mapstruct.version>1.6.3</org.mapstruct.version> </properties> <dependencies> <!-- Lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> <scope>provided</scope> </dependency> <!-- MapStruct --> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct</artifactId> <version>${org.mapstruct.version}</version> </dependency> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-processor</artifactId> <version>${org.mapstruct.version}</version> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <source>17</source> <target>17</target> <annotationProcessorPaths> <!-- Lombok 必须在 MapStruct 前面 --> <path> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> </path> <!-- MapStruct --> <path> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-processor</artifactId> <version>${org.mapstruct.version}</version> </path> <!-- Lombok + MapStruct 绑定 --> <path> <groupId>org.projectlombok</groupId> <artifactId>lombok-mapstruct-binding</artifactId> <version>0.2.0</version> </path> </annotationProcessorPaths> </configuration> </plugin> </plugins> </build>