无法扩展AbstractProcessor以创建Java注解处理器。

5

我想开始创建一个javax注解处理器,目前是在Android Studio中进行。我只需要gradle依赖项。目前在gradle中,我尝试了以下内容:

provided 'javax.annotation:jsr250-api:1.0'

但是当我尝试构建以下类时,它说找不到AbstractProcessor类:
class MyAnnotationProcessor extends AbstractProcessor{
}

如何让它识别这个类?

以下是确切的错误:

enter image description here

我的导入内容如下:

enter image description here

这是我的Java版本:

 $java -version 
Picked up JAVA_TOOL_OPTIONS: -Xmx512m -Xms64m
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)

你的类中有导入吗?你使用的 JDK 版本是什么? - jbunting
我正在使用Java 6。我输入了import,但它没有被识别。 - j2emanue
分享整个类?分享精确的错误信息? - jbunting
我发送了一个问题截图。 - j2emanue
看起来有些东西不相信你正在使用Java 8。也许你的IDE指向了一个更旧版本的JDK?你并不需要任何依赖来使用AbstractProcessor -- 它随着Java一起提供。 - jbunting
这是我的IDE使用的JDK精确版本。我从IDE设置中获取了它,请告诉我这是否正确:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home - j2emanue
2个回答

12

在 Android 库模块中,AbstractProcessor 是不可访问的。要使其工作,您可以创建一个单独的 "java library" 模块,并将其依赖项添加到您的主模块中。以下是我使用的解决方案的逐步说明:

  1. 在您的 Android 项目中创建一个新模块。右键单击您的项目 -> 新建 -> 模块 -> 选择 Java Library
  2. 按照说明添加模块名称、包名称等并完成设置
  3. 现在,在此库中创建一个新类 CustomAnnotationProcessor 并扩展 AbstractProcessor

  4. 以下是我的自定义注释处理器的快照:

    import java.util.Set;
    import javax.annotation.processing.AbstractProcessor;
    import javax.annotation.processing.RoundEnvironment;
    import javax.lang.model.element.TypeElement;
    
    public class CustomAnnotationProcessor extends AbstractProcessor{
    @Override
    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
    return false;
    }
    }
    
  5. 在你的app/build.gradle文件中添加编译选项,使用java 1.7。请参考以下快照: enter image description here

  6. 将新创建的模块的依赖项添加到你的主模块中

  7. 编译并运行...!!

如果你喜欢我的回答,请不要忘记点赞 :)


那么是否有可能生成一个包含Android类的文件呢? - canaanhhh
2
花了几个小时!谢谢你!!! - yahya

-1

我遇到了同样的问题,但我找到了解决方案。请参见下面的链接:

  • 从项目布局中完全删除Java模块。
  • 确保只有您的代码幸存下来,删除模块目录中的所有其他内容(或者只删除.iml文件是否足够?)。
  • 将您的源代码再次添加为模块Java库。现在应该一切正常。

https://dev59.com/q4vda4cB1Zd3GeqPYmXo#32933935


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接