1

看来,我无法注册自己的注释处理器。但是使用 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
}

而且我确实仔细检查了我的行为,但我无法弄清楚首先出了什么问题。

在此处输入图像描述

所以真正的问题是为什么 Google 的 AutoService 确实有效而我的却没有?这一直困扰着我。

4

1 回答 1

1

问题是注册注释处理器的默认方式似乎没有在 IDE 上触发。至少,这是我的第一眼观察。

经过几次乏味的审查,我比较了 Google AutoService 的javax.annotation.processing.Processor文件和我的文件。然后,我发现我自己的文件命名是以空格开头的。这就是让我一整天都失眠的原因。写到这里都让我脸红了,但我还是想把我的不幸分享一下,让遇到这种问题的其他人可以检查他们自己的工作中是否有这种错误。我希望,这个解决方案是你正在寻找的。

TL;博士

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

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

于 2020-11-08T11:26:21.467 回答