如何使用extendsFrom共享配置依赖并控制依赖加载顺序
解决方案
你遇到的B.extendsFrom(A)写在dependencies块中编译失败,是因为extendsFrom是Configuration对象的专属方法,只能在configurations代码块内调用,或是在配置完成后的全局作用域调用,不属于dependencies代码块的可用方法。
要实现B自身依赖排在继承自A的依赖前面的效果,有两种兼容Gradle 8+的实现方式:
方案1:手动追加A的依赖到B的末尾(写法最简单,无警告)
直接遍历A的所有依赖项追加到B的依赖列表末尾,替代原来的B A写法:
configurations { A B } dependencies { A 'jar1' B 'jar2' } // 在配置阶段完成后追加依赖,保证B自身的依赖排在前面 configurations.B.dependencies.addAll(configurations.A.allDependencies)
最终B的类路径顺序为jar2;jar1,和你之前的写法效果完全一致。
方案2:使用extendsFrom配合类路径排序
如果你需要保留配置的继承关系,可以在使用类路径的位置手动调整顺序即可:
configurations { A B { extendsFrom A } } dependencies { A 'jar1' B 'jar2' } // 示例:给源码编译类路径调整顺序 sourceSets.main.compileClasspath = configurations.B + configurations.A
在其他需要用到B配置类路径的场景,按上述逻辑调整顺序即可符合要求。
内容的提问来源于stack exchange,提问作者Padraic Renaghan
相关产品推荐
相关产品推荐

