您现在的位置是:主页 > 数据库技术 > 数据库技术
Annotation Processor 处理器问题如何深度定位
IDCBT2022-01-14【服务器技术】人已围观
简介Annotation Processor 处理器问题如何深度定位,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 什么是 Annot
Annotation Processor 处理器问题如何深度定位,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
什么是 Annotation Processor 构建问题
写过自定义注解处理器的老司机们乍一看这个问题觉得挺简单,是的,因为网上基本通篇都在教你怎么打日志,但是你有没有想过如果连日志都打印不出来的时候你怎么定位呢?譬如如下代码:
// 确认 META-INF/services/javax.annotation.processing.Processor 没问题 // 确认构建脚本没问题,确认注解 Bridge 有被使用且有参与构建 @AutoService(Processor.class) public class TestAnnotationProcessor extends AbstractProcessor { public TestAnnotationProcessor() { System.out.println("TestAnnotationProcessor constrator"); } @Override public synchronized void init(ProcessingEnvironment processingEnvironment) { super.init(processingEnvironment); System.out.println("TestAnnotationProcessor init"); } @Override public Set<String> getSupportedAnnotationTypes() { System.out.println("TestAnnotationProcessor getSupportedAnnotationTypes"); Set<String> supported = new HashSet<String>(); supported.add(Bridge.class.getCanonicalName()); return supported; } @Override public boolean process(Set<? extends TypeElement> set, RoundEnvironment roundEnvironment) { System.out.println("TestAnnotationProcessor process"); return true; } }
运行构建后compileReleaseJavaWithJavac过程中没有先吐我 Annotation Processor 的任意一行日志,直接报错找不到我注解处理器产物类引用(即直接进行了 compile class 环节)。
你懵逼吗?反正我懵逼了!打印日志不好使了,哈哈,环境确认没问题,什么鬼,直接越过 Annotation Processor 进行 compile 了。
这时候就需要你稍微深入定位分析(撸javac源码的巨佬请自行飘过),前提就是你需要熟悉下 Annotation Processor 基本原理,然后我们通过一些额外的javac详细日志进行举例分析。
标签:很赞哦! ()