java - 未找到 Android Studio 注释抽象处理器

标签 java android annotations android-studio

我正在尝试向我的 Android 项目添加注解处理器,但我收到一条错误消息,指出找不到 AbstractProcessor。我同时创建了一个单独的 java 项目,但我宁愿将所有内容都放在一个 Android 项目中。在我的项目中包含 AbstractProcessor 的最佳方式是什么?我正在使用 AndroidStudio 和 Gradle。

更新:

我重新打包了 javax.annotationjavax.lang.modeljavax.tools 以位于我项目的命名空间下 (as per these instructions ).我包含了一个 resources/META-INF/services/javax.annotation.processing.Processor,其中包含我的 AbstractProcessor 子类的完整类名,一切都可以正常编译。但是,处理器永远不会运行。

编辑: 简而言之,我有一个为方法提供注释的 Android 库项目。我想提供一个处理器,如果注释使用不当会导致编译时错误。如果我尝试将处理器放入 Android 库项目中,Gradle 将不会构建它,因为找不到 javax.* 类。我能让它工作的唯一方法是在库项目中创建一个 java 模块,并将处理器放在那里。但是,这意味着我必须在任何要使用此注释的项目中有 2 个依赖项;一种用于获取注解,一种用于获取处理器。

最佳答案

好吧,我认为这里存在一些巨大的误解。首先,您不必将 javax.* 中的任何内容打包到您的应用程序中。注释处理器在编译时运行并在该阶段完成其所有工作。之后,它可以生成一些文件或配置项目等,这些文件将被打包到应用程序中。注释处理器(及其 javax.* 依赖项)不会,因为应用程序在运行时不需要处理器。只有开发人员在构建项目时需要它。

基于 Ant 的构建也被弃用了。您应该使用 Android gradle(官方)或 maven(非官方)插件。

您可能会要求处理器在编译时仍然需要依赖项。没错,但是 javax.* 类是由构建项目的编译器提供的。在命令行构建和基于 IntelliJ 的 IDE 的情况下,JDK APT 提供它,在 Eclipse 的情况下,Eclipse JDT APT 插件提供类。

如果您想将注释处理器添加到 Android gradle 项目,请查看我们的 example在安卓注解中。您应该注意 android-apt 插件的使用,它正确地添加了编译时依赖项(处理器),并且还设置了源路径,这样 IntellJ 就可以在没有手动配置的情况下挑选它们。

对编辑的反射(reflection):

不幸的是,您应该将处理器移到一个单独的项目中。这是它唯一可以工作的方式,顺便说一下,这是注释处理器的自然方式。例如 daggerAndroidAnnotations 也有这个设置(但原因略有不同)。 是的,这意味着你必须添加两个依赖项,但你必须处理它。或者您可以将您的库作为必需的 dep 添加到您的处理器。在这种情况下,用户只需将处理器添加为依赖项,因为库也将作为可传递的依赖项添加。但这会很奇怪,因为 lib 是这里的主要依赖,处理器只是一个验证其正确使用的工具(如果我很好地理解您的编辑)。

关于java - 未找到 Android Studio 注释抽象处理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26805421/

相关文章:

android - `$cookies.put()` 需要 30 秒才能在 Android 上将 cookie 保存到磁盘上

java - 用于为方法添加时间戳的自定义注释

java - 如何在 Java 中注释代码块

java - 如何让我的程序计算调用方法的次数?

java - 将 ADB 添加到我的 Java PC 应用程序

java - 清理 Java 流中的这个条件吗?

android - 如何处理 android.view.inflateexception 二进制 XML 文件行 #5

android - Jetpack 撰写 : Managing Shared UI State

java - Spring/Hibernate 同一个实体不同的数据库结构

java - 将 Webelement 类型转换为 Select 时出错