您现在的位置是:主页 > 数据库技术 > 数据库技术

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详细日志进行举例分析。

标签:

很赞哦! ()

本栏推荐