AutoService注解无法生成META-INF文件

背景

在写注解处理器时,首先就是要继承AbstractProcessor,并且按照如下步骤声明:

  • 需要在 processors 库的 main 目录下新建 resources 资源文件夹;

  • 在 resources文件夹下建立 META-INF/services 目录文件夹;

  • 在 META-INF/services 目录文件夹下创建 javax.annotation.processing.Processor 文件;

  • 在 javax.annotation.processing.Processor 文件写入注解处理器的全称,包括包路径;

这样声明下来也太麻烦了?这就是用引入auto-service的原因。

在类的顶部加入注解:@AutoService(Processor.class),这个注解处理器是Google开发的,可以用来生成 META-INF/services/javax.annotation.processing.Processor 文件信息。

使用遇到的问题

在module_processor中导入我们要用的auto-service库;

implementation 'com.google.auto.service:auto-service:1.0-rc6'

在类上面添加service的注解即可:

@AutoService(Processor.class)
public class BindViewProcessor extends AbstractProcessor {
 ...}

编译项目后却始终不见META-INF目录的生成,正常是会在该注解处理器项目的目录module_processor/build/classes/java/main/META-INF下生成。

解决方案一:

网上有人说是gradle的版本问题

(1)将原来根目录的build.gradle 里依赖的gradle版本改为3.5.3

dependencies {
        classpath 'com.android.tools.build:gradle:3.5.3'
        
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }

(2)以及gradle-wrapper.properties文件的gradle版本修改为4.X版本的较低版本

方案一我没有试过,不知是否可行,而且要改gradle的版本可能对原本的项目会有影响。

方案二:继续使用gradle5.4.1版本:

由于Gradle 5.0将忽略compile classpath中的 annotationProcessor,因此需要手动添加annotationProcessor 'com.google.auto.service:auto-service:1.0-rc6'到 annotation processor path 如下:

implementation 'com.google.auto.service:auto-service:1.0-rc6'
annotationProcessor 'com.google.auto.service:auto-service:1.0-rc6'

完整gradle脚本:

apply plugin: 'java-library'

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.google.auto.service:auto-service:1.0-rc6'
    annotationProcessor 'com.google.auto.service:auto-service:1.0-rc6'
    implementation 'com.squareup:javapoet:1.10.0'
    implementation project(':module_annotation')
}

sourceCompatibility = "7"
targetCompatibility = "7"

完成后,再重新编译下,就可以看到META-INF文件夹生成了:

发布了189 篇原创文章 · 获赞 81 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/cpcpcp123/article/details/103871815