Gradle执行build报错detachedConfiguration1依赖配置未声明如何修复
问题解释与修复方案
1. detachedConfiguration1 是什么
Gradle 中的 detachedConfiguration 是动态创建的临时依赖配置,由构建脚本或插件通过 project.configurations.detachedConfiguration() 方法生成,没有显式自定义名称时 Gradle 会按创建顺序自动编号,detachedConfiguration1 就是本次构建过程中第一个生成的临时配置。这类配置通常用于临时解析特定依赖、完成一次性任务(比如本次场景下的二进制兼容性对比),不会和项目的常规编译、运行配置绑定。
2. 报错成因
本次报错由 japicmp 二进制兼容性检查插件的依赖解析逻辑触发:
- japicmp 任务需要拉取指定版本(2.4.16)的
org.codehaus.groovy:groovy-console构件作为基准版本,和当前本地代码构建的结果做兼容性对比,对应逻辑位于binarycompatibility.gradle第67行,就是在这里创建了detachedConfiguration1用来拉取基准依赖。 - 你的项目中存在同名的
:groovy-console子项目,Gradle 依赖解析时默认优先匹配本地子项目,而不是去远程仓库拉取同名第三方构件。 - 你的
:groovy-console子项目没有声明 Gradle 默认约定的default配置(如果子项目没有使用标准的java/java-library插件,或者自定义配置时移除了默认配置就会出现这个问题),导致临时配置尝试从子项目拉取依赖时找不到对应的配置入口,最终解析失败。
3. 修复方案
你可以根据实际需求选择以下任意一种方案:
- 强制 japicmp 从远程仓库拉取基准依赖,跳过本地子项目匹配:修改
binarycompatibility.gradle中拉取基准版本依赖的代码,给依赖坐标加上@jar后缀,写法为org.codehaus.groovy:groovy-console:2.4.16@jar;或者给临时配置添加解析策略:resolutionStrategy.preferProjectModules(false)。 - 给
:groovy-console子项目补全 default 配置:在:groovy-console的 build.gradle 中添加如下配置即可:
configurations { default { extendsFrom configurations.runtimeClasspath } }
- 如果不需要执行二进制兼容性检查,直接禁用 japicmp 相关任务即可:执行构建时添加参数
./gradlew build -x japicmp,或者在根构建脚本中添加配置tasks.withType(JapicmpTask) { enabled = false }。
内容的提问来源于stack exchange,提问作者Ekaterina Ivanova iceja.net
相关产品推荐
相关产品推荐

