Gradle跨模块代码引用:如何从Module A访问Module C中的类
解决Gradle多模块中跨模块类访问的问题
这其实是Gradle依赖配置的特性导致的,我来给你拆解一下并解决这个问题:
问题根源
你当前用的implementation依赖配置是传递性隐藏的——简单说,当Module B用implementation依赖Module C时,C里的类只会在B的代码内部可见,不会被暴露给依赖B的Module A。这是Gradle特意设计的,目的是控制依赖可见性,避免上层模块意外依赖到下层模块的内部实现,同时减少类路径的冗余。
两种解决方案
方案1:将Module B对C的依赖改为api
如果你希望所有依赖Module B的模块(比如A)都能访问到Module C的类,只需要把Module B的build.gradle里的依赖配置从implementation改成api:
// Module B的build.gradle dependencies { // 替换原来的implementation api project(":moduleC") // 其他依赖... }
api配置的作用就是把依赖的模块“暴露”出去,让上层依赖模块能间接访问到这个依赖的内容。
方案2:在Module A中直接依赖Module C
如果只是Module A需要单独访问Module C的类,不想让所有依赖B的模块都看到C,那可以直接在Module A的build.gradle里添加对C的依赖:
// Module A的build.gradle dependencies { implementation project(":moduleB") // 添加这一行 implementation project(":moduleC") // 其他依赖... }
这种方式会让A和C产生直接依赖关系,适合只在A中需要用到C的场景,但后续维护要注意这个直接依赖的存在。
小提示
日常开发中建议优先使用implementation,只有当确定需要把某个依赖暴露给上层模块时再用api,这样能保持依赖关系清晰,避免出现不必要的间接依赖哦。如果是Android项目,这个规则也是完全适用的,因为Android Gradle插件复用了标准Gradle的依赖配置逻辑。
内容的提问来源于stack exchange,提问作者DawidJ
相关产品推荐
相关产品推荐

