Gradle загружает ненужные зависимости

Я пытаюсь загрузить с помощью Gradle мою недавно опубликованную зависимость от Maven Central:

repositories {
  mavenCentral()
}

dependencies {
  implementation 'io.github.iltotore:ec-client_2.13:1.0-fixed'
}

При попытке сборки получаю ошибку:

Could not find io.github.iltotore:core:1.0-fixed.
Required by:
    project : > io.github.iltotore:ec-client_2.13:1.0-fixed

Но io.github.iltotore:core:1.0-fixed отсутствует в pom библиотеки, и мои друзья могут использовать его без каких-либо ошибок.

Чтобы решить эту проблему, я попытался:

  • работает gradlew build --refresh-dependency

  • удаление кешей в ~/.gradle/

  • аннулировать кеши с помощью Intellij IDEA

  • удаление моего локального maven

но эта проблема все еще здесь.

Я использую Gradle 6.5 с Intellij IDEA 2020.1.2.


person Il_totore    schedule 19.06.2020    source источник
comment
mvnrepository.com/artifact/io.github.iltotore/ec-client - Maven cetnral не имеет исправления 1.0. Вы можете перепроверить, как вы получили эту версию? там просто 1.0   -  person Yogesh_D    schedule 19.06.2020
comment
Да, он существует: search.maven. org/artifact/io.github.iltotore/ec-client_2.13/   -  person Il_totore    schedule 19.06.2020
comment
вы правы, погрузившись в настоящий репозиторий maven, я его нашел. repo1.maven.org/maven2/io /github/iltotore/ec-client_2.13/. Однако пом ничего не упоминает о ядре. repo1.maven.org/maven2/io/github/iltotore/ec-client_2.13/. Однако repo1.maven.org/maven2/io/github/iltotore/ec-client_2.13/1.0/ действительно зависит от ядра. Что вам нужно сделать, это попытаться удалить локальную версию io.github.iltotore, а затем повторить попытку.   -  person Yogesh_D    schedule 19.06.2020
comment
Grade хранит файлы по адресу stackoverflow.com/questions/ 10834111/, найдите папку io/github/iltotore и удалите ее, снова запустите сборку, это может решить проблему.   -  person Yogesh_D    schedule 19.06.2020
comment
@Yogesh_D Я уже сделал это, но проблема все еще возникает. Я сказал, что я пробовал в первом посте.   -  person Il_totore    schedule 19.06.2020
comment
К сожалению, в данный момент я не могу думать ни о чем другом, будем надеяться, что у кого-то еще есть представление о том, что происходит.   -  person Yogesh_D    schedule 19.06.2020


Ответы (1)


Начиная с Gradle 6.0, подключаемый модуль Maven Publish также будет публиковать метаданные модуля Gradle. Метаданные имеют расширение файла .module, и вы можете увидеть его в репозитории здесь.

Если вы откроете pom file, вы заметите, что вверху есть комментарий:

<!--  This module was also published with a richer model, Gradle metadata,   -->
<!--  which should be used instead. Do not delete the following line which   -->
<!--  is to indicate to Gradle or any Gradle module metadata file consumer   -->
<!--  that they should prefer consuming it instead.  -->
<!--  do_not_remove: published-with-gradle-metadata  -->

Это указывает Gradle использовать файл метаданных вместо файла pom.

Если вы откроете файл метаданных, вы можете видеть, что он действительно имеет зависимость от несуществующего модуля:

"dependencies": [
    ...
    {
        "group": "io.github.iltotore",
        "module": "core",
        "version": {
            "requires": "1.0-fixed"
        }
    }
]

Поскольку core не существует ни в одной версии, я предполагаю, что это ошибка. Возможно, вы настраиваете файл pom, но не делаете этого для метаданных модуля.

Есть несколько способов исправить это (все следующие фрагменты предназначены для Groovy DSL).

А. Опубликовать новую версию без метаданных модуля

Таким образом, вы полагаетесь исключительно на файл pom. Вы можете сделать это примерно так:

tasks.withType(GenerateModuleMetadata) {
    enabled = false
}

См. Понимание метаданных модуля Gradle в Gradle. гид пользователя.

B. Отключите метаданные модуля в репозитории в проекте-потребителе.

Обратите внимание, что это действует для всех модулей, а не только для сломанного:

repositories {
    mavenCentral {
        metadataSources {
            mavenPom()
            artifact()
            ignoreGradleMetadataRedirection()
        }
    }
}

См. раздел Объявление репозиториев в руководстве пользователя Gradle.

C. Исправьте метаданные на стороне-потребителе для этой конкретной зависимости.

Что-то типа:

dependencies {
    dependencies {
        components {
            // Fix wrong dependency in client_2.13
            withModule("io.github.iltotore:ec-client_2.13") {
                allVariants {
                    withDependencies {
                        removeAll { it.group == "io.github.iltotore" && it.name == "core" }
                    }
                }
            }
        }
    }

    implementation 'io.github.iltotore:ec-client_2.13:1.0-fixed'
}

См. раздел Исправление метаданных с помощью правил метаданных компонентов в руководстве пользователя Gradle.

person Bjørn Vester    schedule 19.06.2020