能否让外部Gradle注解处理器自动传递其依赖?
Gradle注解处理器依赖自动引入方案
当然可以实现仅配置annotationProcessor 'my:processor:1.0.0'就自动引入javapoet等依赖,核心是调整注解处理器项目的依赖声明方式:
解决方法:修改注解处理器项目的依赖配置
在你的my.processor项目中,将javapoet的依赖从implementation改为api:
dependencies { api 'com.squareup:javapoet:1.13.0' }
这样当其他项目通过annotationProcessor引入my:processor:1.0.0时,Gradle会自动将api标记的依赖(javapoet)传递到annotationProcessor类路径中,无需手动添加。
原理说明
implementation依赖是非传递性的:仅当前项目编译和运行时可用,不会暴露给依赖当前项目的下游模块。api依赖是传递性的:不仅当前项目可用,还会暴露给所有依赖当前项目的模块,包括通过annotationProcessor引入的场景。
备选方案:使用compileOnly+annotationProcessor(适用于仅处理器运行时依赖场景)
如果javapoet仅作为注解处理器运行时的依赖,不需要让下游项目直接编译使用,可以在处理器项目中同时声明:
dependencies { compileOnly 'com.squareup:javapoet:1.13.0' annotationProcessor 'com.squareup:javapoet:1.13.0' }
发布处理器时需确保依赖传递性配置正确,不过这种方式不如api直接,推荐优先使用第一种方案。
内容的提问来源于stack exchange,提问作者zaaarf
相关产品推荐
相关产品推荐

