Eli*_*zer 4 java android annotations android-studio
我正在尝试为我的Android项目添加注释处理器,但是我收到一条错误消息,说AbstractProcessor无法找到.我在此期间创建了一个单独的java项目,但我宁愿将所有内容保存在一个Android项目中.包含AbstractProcessor在我的项目中的最佳方式是什么?我正在使用AndroidStudio和Gradle.
更新:
我重新打包javax.annotation,javax.lang.model并且javax.tools坐在我项目的命名空间下(根据这些说明).我包含一个资源/ META-INF/services/javax.annotation.processing.Processor,它包含我的AbstractProcessor子类的完整类名,所有内容编译都很好.但是,处理器永远不会运行.
编辑: 简而言之,我有一个Android库项目,为方法提供注释.我想提供一个处理器,如果注释使用不正确,会导致编译时错误.如果我尝试将处理器放在Android库项目中,Gradle将不会构建它,因为找不到javax.*类.我能让它工作的唯一方法是在库项目中创建一个java模块,并将处理器放在那里.但是,这意味着我必须在我想要使用此批注的任何项目中有2个依赖项; 一个得到注释,一个得到处理器.
好吧,我认为这里存在一些巨大的误解.首先,您不必将任何内容打包javax.*到您的应用程序中.注释处理器在编译时运行,并在该阶段完成其所有工作.之后,它可以生成一些文件或配置项目等,这些文件将打包到应用程序中.注释处理器(及其javax.*依赖性)将不会,因为应用程序在运行时不需要处理器.在构建项目时,只有开发人员需要它.
基于蚂蚁的建筑也被弃用了.你应该使用Android gradle(官方)或maven(非官方)插件.
您可以要求处理器在编译时仍然需要依赖项.这是事实,但是javax.*类是由构建项目的编译器提供的.在命令行构建和基于IntelliJ的IDE的情况下,JDK APT提供它,在Eclipse的情况下,Eclipse JDT APT插件提供类.
如果要将注释处理器添加到Android gradle项目,请查看AndroidAnnotations中的示例.您应该注意android-apt插件的使用,它正确地添加了编译时依赖项(处理器),并且还设置了源路径,因此IntellJ可以在没有手动配置的情况下选择它们.
对编辑的反思:
不幸的是,您应该将处理器移动到单独的项目中.这是它可以工作的唯一方式,顺便说一下它是注释处理器的自然方式.例如dagger,AndroidAnnotations也有这种设置(但原因略有不同).是的,这意味着你必须添加两个依赖项,但你必须处理它.或者,您可以将库添加为处理器所需的dep.在这种情况下,用户只需要将处理器添加为依赖项,因为lib也将作为传递dep添加.但这很安静,因为lib是这里的主要部分,处理器只是验证其正确用法的工具(如果我理解你的编辑好).
| 归档时间: |
|
| 查看次数: |
3134 次 |
| 最近记录: |