You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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的最新版本

我的疑问:

  1. 如何配置Gradle以正确解析androidx.test的传递依赖?
  2. 是否需要手动添加缺失的依赖,还是有办法确保自动获取所有所需库?

执行./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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 12:19:51