Gradle не смог разрешить библиотеку androidx в java-библиотеке.

Вопрос или проблема

Я работаю над настройкой инструментальных тестов в своем проекте библиотеки 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 не может разрешить некоторые из ее транзитивных зависимостей, что приводит к сбоям сборки. Я новичок в Gradle и не знаю, как решить проблему с отсутствующими зависимостями.

Вот сообщение об ошибке, которое я получаю:

:lib:test: Не удалось разрешить androidx.tracing:tracing:1.1.0.
Требуется для:
    проект :lib > androidx.test:runner:1.6.2
    проект :lib > androidx.test:runner:1.6.2 > androidx.test:monitor:1.7.2

Возможное решение:
 - Объявить репозиторий, предоставляющий артефакт, см. документацию по адресу https://docs.gradle.org/current/userguide/declaring_repositories.html

Что я попробовал:

  1. Очистил кэш Gradle.
  2. Недействителен и перезапустил Android Studio.
  3. Проверил наличие последней версии androidx.test:runner.

Ни один из этих шагов не решил проблему.

Вопросы:

  1. Как я могу настроить Gradle для правильного разрешения транзитивных зависимостей для androidx.test?
  2. Мне нужно вручную добавлять отсутствующие зависимости, или есть способ гарантировать, что все необходимые библиотеки загружаются автоматически?

Ссылка на репозиторий Maven, который я пытаюсь импортировать

Вывод команды ./gradlew :lib:dependencies



        > Задача :lib:dependencies

        ------------------------------------------------------------
        Проект ':lib'
        ------------------------------------------------------------

        annotationProcessor - Аннотация процессоров и их зависимости для набора источников 'main'.
        Нет зависимостей

        api - API зависимости для функции 'main'. (n)
        Нет зависимостей

        apiElements - API элементы для функции 'main'. (n)
        Нет зависимостей

        compileClasspath - Компиляция classpath для набора источников 'main'.
        \--- 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 - Зависимости API только для компиляции для функции 'main'. (n)
        Нет зависимостей

        default - Конфигурация для стандартных артефактов. (n)
        Нет зависимостей

        implementation - Зависимости реализации для функции 'main'. (n)
        \--- androidx.test:runner:1.6.2 (n)

        mainSourceElements - Список каталогов источников, содержащихся в основном наборе источников. (n)
        Нет зависимостей

        runtimeClasspath - Время выполнения classpath набора источников 'main'.
        \--- 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 - Аннотация процессоров и их зависимости для набора источников 'test'.
        Нет зависимостей

        testCompileClasspath - Компиляция classpath для набора источников 'test'.
        \--- 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 - Зависимости только для компиляции набора источников 'test'. (n)
        Нет зависимостей

        testImplementation - Зависимости только для реализации набора источников 'test'. (n)
        Нет зависимостей

        testRuntimeClasspath - Время выполнения classpath набора источников 'test'.
        \--- 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 - Зависимости только для времени выполнения для набора источников 'test'. (n)
        Нет зависимостей

        (*) - Указывает на повторяющиеся экземпляры поддерева транзитивной зависимости. Gradle развивает поддеревья транзитивных зависимостей только один раз для каждого проекта; повторяющиеся экземпляры отображают только корень поддерева и далее эту аннотацию.

        (n) - Зависимость или конфигурация зависимости, которую невозможно разрешить.

        Доступен веб-отчет о зависимостях с поисковым индексом, который можно получить, добавив параметр --scan.

        СБОРКА УСПЕШНА в 666 мс
        1 исполняемая задача: 1 выполнена


Ответ или решение

Решение проблемы с разрешением зависимостей библиотеки androidx в проекте на Gradle

Ваша проблема связана с тем, что Gradle не может разрешить некоторые транзитивные зависимости для библиотеки androidx.test:runner:1.6.2, в частности, зависимость androidx.tracing:tracing:1.1.0. Это может происходить по нескольким причинам, и мы рассмотрим способы решения данной проблемы.

1. Проверьте конфигурацию repositories

Убедитесь, что вы добавили необходимые репозитории в ваш файл build.gradle. Вы упоминаете, что используете google() и mavenCentral(), что корректно, так как большинство библиотек Android доступны именно там. Однако, иногда может потребоваться добавить репозиторий JCenter, поэтому попробуйте изменить ваш блок repositories следующим образом:

repositories {
    google()
    mavenCentral()
    jcenter() // добавьте это
}

2. Обновите зависимости

На момент написания вашего вопроса последняя версия androidx.test уже была указана. Однако, стоит проверить, существуют ли более новые версии === androidx.tracing. Вы можете сделать это, посетив Maven Repository.

Запустить Gradle и проверить наличие обновлений можно следующим образом:

./gradlew dependencyUpdates

3. Обновите Gradle и плагины

Убедитесь, что вы используете последнюю версию Gradle и плагина Android Gradle. Это может помочь избежать проблем с совместимостью:

  • В файле gradle-wrapper.properties убедитесь, что указана последняя версия:
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip
  • В файле build.gradle проверьте, чтобы у вас была последняя версия плагина Android Gradle:
classpath 'com.android.tools.build:gradle:8.0.0'

4. Убедитесь, что зависимости правильно добавлены

Вы можете явно добавить недостающую зависимость androidx.tracing:tracing. Это позволит избежать ошибки при попытке загрузить её транзитивно:

dependencies {
    implementation 'androidx.test:runner:1.6.2'
    implementation 'androidx.tracing:tracing:1.1.0'
}

5. Кеширование и очистка сборки

Если предыдущие шаги не решили проблему, возможно, потребуется сбросить кеш Gradle и выполнить очистку сборки:

./gradlew clean
./gradlew --stop
./gradlew build --refresh-dependencies

6. Получение дополнительной информации

Чтобы узнать больше о динамических зависимостях, вы можете использовать:

./gradlew :lib:dependencies --configuration compileClasspath

Этот вывод предоставит итоговые зависимости и информацию, относящуюся к сборке.

Ответы на ваши вопросы:

  1. Как настроить Gradle для правильного разрешения транзитивных зависимостей для androidx.test?

    • Убедитесь, что плагины и репозитории правильно добавлены и актуальны. Если возникают проблемы, добавьте отсутствующие зависимости непосредственно.
  2. Необходимо ли вручную добавлять отсутствующие зависимости?

    • Да, в некоторых случаях (как в вашем случае) вам может потребоваться добавить недостающие зависимости вручную. Однако, в большинстве случаев Gradle автоматически загружает транзитивные зависимости, если они доступны в указанных репозиториях.

Надеюсь, эти рекомендации помогут вам решить вашу проблему с Gradle. Если возникнут дополнительные вопросы, пожалуйста, не стесняйтесь обращаться за помощью.

Оцените материал
Добавить комментарий

Капча загружается...