«Не удалось разрешить все файлы для конфигурации» после обновления Gradle

#gradle #nexus

#gradle #nexus

Вопрос:

У меня есть скрипт Gradle, который загружает последний артефакт моментального снимка с сервера Nexus. Он отлично работает с Gradle 5.4, но, похоже, не хочет работать после обновления до Gradle 6.5.

Это содержимое build.gradle:

 apply plugin: "java"
  repositories {
    maven {
        url "https://somerepo.com/repository/app-snapshot/"
                credentials {
                username 'a-user'
                password 'a-password'
            }
        authentication {
            basic(BasicAuthentication)
        }

    }
}

configurations.all {
    resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}

  configurations {
    component
}
  dependencies {
    component group: "com.bla.ble, name: "component-name", version: "${version}-SNAPSHOT"

}
  task copyComponent(type: Copy) {
    from configurations.component
    into "/some/local/path"
}

 

Сбой Gradle выглядит следующим образом:

 Execution failed for task ':copyWorkflow'.
> Could not resolve all files for configuration ':workflow'.
   > Could not find com.bla.ble:component-name:3.2.0-SNAPSHOT.
     Searched in the following locations:
       - https://somerepo.com/repository/app-snapshot/com/bla/ble/component-name/3.2.0-SNAPSHOT/maven-metadata.xml
       - https://somerepo.com/repository/app-snapshot/com/bla/ble/component-name/3.2.0-SNAPSHOT/component-name-3.2.0-20201130.163046-11.pom
     Required by:
         project :
 

Я я перехожу к https://somerepo.com/repository/app-snapshot/com/bla/ble/component-name/3.2.0-SNAPSHOT/maven-metadata.xml это предоставляет действительный файл метаданных и указывает на моментальный снимок, который на самом деле имеет действительный файл.

Затем я снова попытался понизить версию до Gradle 5.4 и все прошло нормально. Я также пытался найти какие-либо устаревшие опции в Gradle 6.x, но не смог найти, из-за чего это приводит к сбою.

Ответ №1:

Нашел решение через этот пост: https://discuss.gradle.org/t/how-to-fetch-maven-artifact-without-pom-file-in-gradle-6-0/33836/2

Краткая история: критическое изменение, внесенное в Gradle 6.x, предотвращает загрузку артефактов, если POM отсутствует. Чтобы обойти это требование, в определение maven необходимо добавить следующее:

         metadataSources {
            artifact()
        }
 

Дополнительная информация: https://docs.gradle.org/current/userguide/upgrading_version_5.html?_ga=2.181891495.1612153887.1606754101-263409462.1606754101#maven_or_ivy_repositories_are_no_longer_queried_for_artifacts_without_metadata_by_default

Комментарии:

1. Я не знаю, почему многие люди не сталкивались с этой проблемой. Это определенно критическое изменение. Этот ответ работает отлично!