为什么我不能注册自己的注释处理器?

问题描述

看来,我无法注册自己的注释处理器。但是使用Google的AutoService确实注册了我的注释处理器。而且效果很好。

因此,我确实将 javax.annotation.processing.Processor文件放置在resources/meta-inf/services目录下,该目录包含AbstractProcessor实现的包路径。而且我特别添加错误消息,该消息必须使构建失败,如下所示。

override fun process(annotations: MutableSet<out TypeElement>?,roundEnv: RoundEnvironment?) : Boolean {
    processingEnv.messager.printMessage(Diagnostic.Kind.ERROR,"Some Error !!")
    // Some work
}

我确实仔细检查了我的动作,但是我一开始无法弄清楚到底出了什么问题。

enter image description here

所以真正的问题是,为什么Google的AutoService可以工作而我的AutoService无法工作?那一直困扰着我。

解决方法

问题是注解处理器的默认方式似乎未在IDE上触发。至少,这是我乍看之下的观察结果。

经过几次乏味的审核,我比较了Google AutoService的javax.annotation.processing.Processor文件和我的文件。然后,我发现自己的文件命名是从空格开始的。这就是让我整夜不眠的原因。即使写这篇文章也让我感到羞耻,但我确实想分享我的不幸,以便其他遇到此类问题的人可以检查自己的工作中是否存在此类错误。我希望这个解决方案正是您想要的。

TL; DR

如果有任何拼写错误或多余的字符(包括空格),请检出javax.annotation.processing.Processor文件。

还有一个友好的建议,建议您使用 Google的AutoService 为您完成所有麻烦的工作。