【问题标题】:Android Studio Annotation AbstractProcessor Not FoundAndroid Studio 注解 AbstractProcessor Not Found
【发布时间】:2014-11-07 16:11:54
【问题描述】:

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

更新:

我将 javax.annotationjavax.lang.modeljavax.tools 重新打包到我项目的命名空间 (as per these instructions) 下。我包含了一个资源/META-INF/services/javax.annotation.processing.Processor,其中包含我的AbstractProcessor 子类的完整类名,并且一切都编译得很好。但是,处理器永远不会运行。

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

【问题讨论】:

  • 究竟是哪个注释处理器?
  • 我的AbstractProcessor 子类。

标签: java android annotations android-studio


【解决方案1】:

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

基于蚂蚁的建筑也已被弃用。您应该使用 Android gradle(官方)或 maven(非官方)插件。

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

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

对编辑的反思:

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

【讨论】:

  • 我把问题澄清了一点。
猜你喜欢
  • 2014-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多