Gradle中如何屏蔽MapStruct注解处理器自动生成代码的弃用警告
解决方案
方案一:升级MapStruct到1.5.0及以上版本(推荐)
你使用的1.4.2版本MapStruct不支持自定义生成代码的注解,1.5及以上版本新增了生成类自定义注解的配置项,直接通过编译参数配置即可自动给所有生成的Mapper实现类添加弃用警告屏蔽注解。
修改你的build.gradle配置如下:
plugins { id 'java' } repositories { mavenCentral() } dependencies { // 升级MapStruct版本到1.5.5.Final(最新稳定版) annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.5.Final' implementation 'org.mapstruct:mapstruct:1.5.5.Final' } compileJava { options.deprecation = true // 配置MapStruct生成类自动添加弃用警告屏蔽注解 options.compilerArgs += [ '-Amapstruct.generated.annotations=java.lang.SuppressWarnings("deprecation")' ] }
该方案的优势是从代码层面规范屏蔽警告,不会影响生成代码其他类型警告的输出,同时手写代码的弃用警告完全不受影响。
方案二:Gradle输出过滤(无需升级依赖)
如果因为项目限制不能升级MapStruct版本,可以通过Gradle的日志过滤能力,直接屏蔽生成目录下的弃用警告输出,修改build.gradle配置如下:
plugins { id 'java' } repositories { mavenCentral() } dependencies { annotationProcessor 'org.mapstruct:mapstruct-processor:1.4.2.Final' implementation 'org.mapstruct:mapstruct:1.4.2.Final' } compileJava { options.deprecation = true def generatedSourcesPath = layout.buildDirectory.dir("generated/sources/annotationProcessor/java").get().asFile.absolutePath // 过滤生成代码的弃用警告 logging.addStandardErrorListener { event -> def msg = event.message // 仅输出来源非生成目录、或者非弃用类型的警告 if (!(msg.contains(generatedSourcesPath) && msg.contains("[deprecation]"))) { println msg } } }
该方案无需修改依赖版本,直接在日志输出层面过滤不需要的警告,缺点是会同时屏蔽生成目录下你可能需要关注的其他弃用警告。
内容的提问来源于stack exchange,提问作者M. Justin
相关产品推荐
相关产品推荐

