Gradle本地jar配置Dagger AnnotationProcessor依赖报错问题
问题根因
annotationProcessor 配置引入本地jar时,不会自动解析拉取jar的传递依赖;而用Maven坐标引入依赖时,Gradle会自动把dagger-compiler关联的所有依赖包都加入注解处理器类路径。只单独引入dagger-compiler-2.41.jar时,会漏掉它运行必需的依赖包,报错中缺失的JavacBasicAnnotationProcessor就不在dagger-compiler核心jar包内。
另外注意:注解处理器的类路径和业务代码的implementation类路径是完全隔离的,之前配置在implementation下的Dagger相关jar,注解处理器运行时无法读取。
解决方案
二选一即可:
方案1:使用全量打包的fat jar(最省事)
下载Dagger 2.41版本对应的all分类jar包,文件名是dagger-compiler-2.41-all.jar,这个包已经把注解处理器运行需要的所有依赖都shade整合到单个jar里了,直接配置即可:
annotationProcessor files('libs/dagger-compiler-2.41-all.jar')
原有implementation下的本地jar配置不需要改动。
方案2:凑齐所有传递依赖jar
如果不想用fat jar,需要把dagger-compiler 2.41运行依赖的所有jar都下载到libs目录,全部加入annotationProcessor配置,需要补的jar包含但不限于(版本必须和dagger 2.41依赖的版本完全匹配):
- dagger-spi-2.41.jar
- javapoet-1.13.0.jar
- guava-31.1-jre.jar
- kotlinx-metadata-jvm-0.3.0.jar
- auto-common-1.2.1.jar
- room-compiler-processing-2.4.0.jar(报错缺失的类就在这个包内)
配置示例:
annotationProcessor files( 'libs/dagger-compiler-2.41.jar', 'libs/dagger-spi-2.41.jar', 'libs/javapoet-1.13.0.jar', 'libs/guava-31.1-jre.jar', 'libs/kotlinx-metadata-jvm-0.3.0.jar', 'libs/auto-common-1.2.1.jar', 'libs/room-compiler-processing-2.4.0.jar' )
注意事项
不要尝试把注解处理器依赖放到implementation配置下,两个配置的类路径互相隔离,放过去依然会报类找不到的错误。
内容的提问来源于stack exchange,提问作者NiJ
相关产品推荐
相关产品推荐

