Gradle скачивает ненужные зависимости - PullRequest
2 голосов
/ 19 июня 2020

Я пытаюсь загрузить с помощью 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 local

, но эта проблема все еще существует.

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

1 Ответ

1 голос
/ 19 июня 2020

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

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

<!--  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).

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

Таким образом, вы полагаетесь исключительно на файл 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...