Gradle Java库无法解析androidx.test传递依赖问题求助
问题描述
我在Gradle Java库项目中配置androidx.test库进行插桩测试,build.gradle的配置如下:
plugins { id 'java-library' } repositories { google() mavenCentral() } dependencies { implementation 'androidx.test:runner:1.6.2' } java { toolchain { languageVersion = JavaLanguageVersion.of(21) } }
但Gradle无法解析部分传递依赖,导致构建失败。收到的错误信息如下:
:lib:test: 无法解析 androidx.tracing:tracing:1.1.0。 被以下依赖需要: project :lib > androidx.test:runner:1.6.2 project :lib > androidx.test:runner:1.6.2 > androidx.test:monitor:1.7.2 可能的解决方案: - 声明提供该构件的仓库,请查看文档:https://docs.gradle.org/current/userguide/declaring_repositories.html
我已经尝试过以下操作,但都没有解决问题:
- 清理Gradle缓存
- 失效并重启Android Studio
- 检查androidx.test:runner的最新版本
我的疑问:
- 如何配置Gradle以正确解析androidx.test的传递依赖?
- 是否需要手动添加缺失的依赖,还是有办法确保自动获取所有所需库?
执行./gradlew :lib:dependencies的输出:
> Task :lib:dependencies ------------------------------------------------------------ 项目 ':lib' ------------------------------------------------------------ annotationProcessor - 主源码集的注解处理器及其依赖。 无依赖 api - 'main' 功能的 API 依赖。(n) 无依赖 apiElements - 'main' 功能的 API 元素。(n) 无依赖 compileClasspath - 主源码集的编译类路径。 \--- androidx.test:runner:1.6.2 +--- androidx.annotation:annotation:1.7.0-beta01 | \--- androidx.annotation:annotation-jvm:1.7.0-beta01 | \--- org.jetbrains.kotlin:kotlin-stdlib:1.7.10 -> 1.8.20 | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.20 | \--- org.jetbrains:annotations:13.0 +--- androidx.test.services:storage:1.5.0 | +--- androidx.annotation:annotation:1.7.0-beta01 (*) | \--- androidx.test:monitor:1.7.0 -> 1.7.2 | +--- androidx.annotation:annotation:1.7.0-beta01 (*) | +--- androidx.tracing:tracing:1.1.0 解析失败 | \--- org.jetbrains.kotlin:kotlin-stdlib:1.8.20 (*) +--- androidx.test:monitor:1.7.2 (*) +--- androidx.tracing:tracing:1.1.0 解析失败 \--- junit:junit:4.13.2 \--- org.hamcrest:hamcrest-core:1.3 compileOnly - 'main' 功能的仅编译依赖。(n) 无依赖 compileOnlyApi - 'main' 功能的仅编译 API 依赖。(n) 无依赖 default - 默认构件的配置。(n) 无依赖 implementation - 'main' 功能的实现依赖。(n) \--- androidx.test:runner:1.6.2 (n) mainSourceElements - 主源码集包含的源码目录列表。(n) 无依赖 runtimeClasspath - 主源码集的运行时类路径。 \--- androidx.test:runner:1.6.2 +--- androidx.annotation:annotation:1.7.0-beta01 | \--- androidx.annotation:annotation-jvm:1.7.0-beta01 | \--- org.jetbrains.kotlin:kotlin-stdlib:1.7.10 -> 1.8.20 | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.20 | \--- org.jetbrains:annotations:13.0 +--- androidx.test.services:storage:1.5.0 | +--- androidx.annotation:annotation:1.7.0-beta01 (*) | \--- androidx.test:monitor:1.7.0 -> 1.7.2 | +--- androidx.annotation:annotation:1.7.0-beta01 (*) | +--- androidx.tracing:tracing:1.1.0 解析失败 | \--- org.jetbrains.kotlin:kotlin-stdlib:1.8.20 (*) +--- androidx.test:monitor:1.7.2 (*) +--- androidx.tracing:tracing:1.1.0 解析失败 \--- junit:junit:4.13.2 \--- org.hamcrest:hamcrest-core:1.3 runtimeElements - 'main' 功能的运行时元素。(n) 无依赖 runtimeOnly - 'main' 功能的仅运行时依赖。(n) 无依赖 testAnnotationProcessor - 测试源码集的注解处理器及其依赖。 无依赖 testCompileClasspath - 测试源码集的编译类路径。 \--- androidx.test:runner:1.6.2 +--- androidx.annotation:annotation:1.7.0-beta01 | \--- androidx.annotation:annotation-jvm:1.7.0-beta01 | \--- org.jetbrains.kotlin:kotlin-stdlib:1.7.10 -> 1.8.20 | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.20 | \--- org.jetbrains:annotations:13.0 +--- androidx.test.services:storage:1.5.0 | +--- androidx.annotation:annotation:1.7.0-beta01 (*) | \--- androidx.test:monitor:1.7.0 -> 1.7.2 | +--- androidx.annotation:annotation:1.7.0-beta01 (*) | +--- androidx.tracing:tracing:1.1.0 解析失败 | \--- org.jetbrains.kotlin:kotlin-stdlib:1.8.20 (*) +--- androidx.test:monitor:1.7.2 (*) +--- androidx.tracing:tracing:1.1.0 解析失败 \--- junit:junit:4.13.2 \--- org.hamcrest:hamcrest-core:1.3 testCompileOnly - 测试源码集的仅编译依赖。(n) 无依赖 testImplementation - 测试源码集的仅实现依赖。(n) 无依赖 testRuntimeClasspath - 测试源码集的运行时类路径。 \--- androidx.test:runner:1.6.2 +--- androidx.annotation:annotation:1.7.0-beta01 | \--- androidx.annotation:annotation-jvm:1.7.0-beta01 | \--- org.jetbrains.kotlin:kotlin-stdlib:1.7.10 -> 1.8.20 | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.8.20 | \--- org.jetbrains:annotations:13.0 +--- androidx.test.services:storage:1.5.0 | +--- androidx.annotation:annotation:1.7.0-beta01 (*) | \--- androidx.test:monitor:1.7.0 -> 1.7.2 | +--- androidx.annotation:annotation:1.7.0-beta01 (*) | +--- androidx.tracing:tracing:1.1.0 解析失败 | \--- org.jetbrains.kotlin:kotlin-stdlib:1.8.20 (*) +--- androidx.test:monitor:1.7.2 (*) +--- androidx.tracing:tracing:1.1.0 解析失败 \--- junit:junit:4.13.2 \--- org.hamcrest:hamcrest-core:1.3 testRuntimeOnly - 测试源码集的仅运行时依赖。(n) 无依赖 (*) - 表示传递依赖子树的重复出现。Gradle 每个项目仅展开一次传递依赖子树;重复出现时仅显示子树的根节点,后跟此注释。 (n) - 表示无法解析的依赖或依赖配置。 添加 --scan 选项可获取基于网页的可搜索依赖报告。 构建成功,耗时 666ms 1 个可执行任务: 1 个已执行
解决方案
1. 修复仓库配置,确保传递依赖可被解析
androidx.tracing:tracing:1.1.0存放在Google Maven仓库中,你当前的配置虽然添加了google(),但可能存在仓库作用范围不足的问题,按以下方式调整:
多模块项目:统一配置仓库到根项目
将仓库配置移至根项目的settings.gradle(或settings.gradle.kts),确保所有子模块共享同一仓库列表:
// settings.gradle pluginManagement { repositories { google() mavenCentral() gradlePluginPortal() } } dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { google() mavenCentral() } } rootProject.name = "你的项目名称" include ':lib'
这样可以避免子模块仓库配置不完整或冲突的问题。
单模块项目:检查仓库配置位置
确保build.gradle中的repositories块位于plugins之后、dependencies之前,且没有被其他配置覆盖。
网络环境检查
如果使用代理,在gradle.properties中配置正确的代理信息:
systemProp.http.proxyHost=你的代理地址 systemProp.http.proxyPort=你的代理端口 systemProp.https.proxyHost=你的代理地址 systemProp.https.proxyPort=你的代理端口
2. 是否需要手动添加缺失依赖?
优先通过完善仓库配置让Gradle自动解析传递依赖,这是更规范的做法。只有当仓库配置正确但仍无法解析时,再考虑手动添加依赖作为临时解决方案:
dependencies { implementation 'androidx.test:runner:1.6.2' // 手动添加缺失的传递依赖 implementation 'androidx.tracing:tracing:1.1.0' }
额外建议
- 升级
androidx.test:runner到最新稳定版(如1.6.3),新版本的依赖树可能更完善,兼容性更好。 - 执行
./gradlew clean build --refresh-dependencies命令,强制刷新依赖缓存并重新拉取所有依赖。
内容的提问来源于stack exchange,提问作者Ghost
相关产品推荐
相关产品推荐

