Разрешение зависимостей Maven и Ivy завершается с Gradle 6.0 - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть рабочий проект, в котором есть зависимость от артефакта maven, созданного одноранговым компонентом, подобного следующему:

repositories {
   ivy {
       url "../cnf/local"
   }
}

configurations {
  ejbTools
}

dependencies {
  ejbTools 'test:com.ibm.ws.ejbcontainer.fat_tools:1.+'
}

Зависимость test:com.ibm.ws.ejbcontainer.fat_tools:1.+ не удается разрешить с помощью Gradle 6.0 со следующей ошибкой:

> Task :com.ibm.ws.ejbcontainer.async_fat:addEJBTools FAILED

FAILURE: Build failed with an exception.

* Where:
Build file '/Users/aguibert/dev/git/open-liberty/dev/com.ibm.ws.ejbcontainer.async_fat/build.gradle' line: 32

* What went wrong:
Execution failed for task ':com.ibm.ws.ejbcontainer.async_fat:addEJBTools'.
> Could not resolve all files for configuration ':com.ibm.ws.ejbcontainer.async_fat:ejbTools'.
   > Could not find any matches for test:com.ibm.ws.ejbcontainer.fat_tools:1.+ as no versions of test:com.ibm.ws.ejbcontainer.fat_tools are available.
     Searched in the following locations:
       - https://repo.maven.apache.org/maven2/test/com.ibm.ws.ejbcontainer.fat_tools/maven-metadata.xml
       - http://public.dhe.ibm.com/ibmdl/export/pub/software/olrepo/test/com.ibm.ws.ejbcontainer.fat_tools/maven-metadata.xml
       - file:/Users/aguibert/dev/git/open-liberty/dev/cnf/local/test/com.ibm.ws.ejbcontainer.fat_tools/
       - file:/Users/aguibert/dev/git/open-liberty/dev/cnf/local/test/com.ibm.ws.ejbcontainer.fat_tools/1.0.33.201909241016/ivy-1.0.33.201909241016.xml
     Required by:
         project :com.ibm.ws.ejbcontainer.async_fat

Контекст

В настоящее время мой проект использует Gradle 5.5 и может быть построен на Java 8, 11 или 12. Я тоже пытаюсь заставить его работать с Java 13, поэтому я пытаюсьдля обновления до Gradle 6.0.

Похоже, что в поведении зависимостей с подстановочными символами в Gradle теперь есть общие изменения (например, com.foo:bar:1.+).

1 Ответ

0 голосов
/ 25 сентября 2019

Согласно этой проблеме Gradle , в Gradle 6.0 произошли серьезные изменения в поведении.Раньше Gradle автоматически проверял наличие метаданных артефактов (например, maven-metadata.xml), но для повышения производительности кажется, что Gradle 6.0 больше не делает этого по умолчанию.

Существует 2 возможных решения этой проблемы:

  1. Использовать определенные координаты зависимости вместо версий с подстановочными символами, таких как 1.+ (что является наилучшей практикой IMO)

  2. Обновление конфигурации repositories.[maven|ivy].metadataSources.В Gradle 5.X значения по умолчанию были:

    repositories {
        maven {
            url "http://repo.mycompany.com/repo"
            metadataSources {
                mavenPom()
                artifact()
            }
        }
        ivy {
            url "http://repo.mycompany.com/repo"
            metadataSources {
                ivyDescriptor()
                artifact()
            }
        }
    }
    

    Но в Gradle 6.0 они теперь:

    repositories {
        maven {
            url "http://repo.mycompany.com/repo"
            metadataSources {
                mavenPom()
            }
        }
        ivy {
            url "http://repo.mycompany.com/repo"
            metadataSources {
                ivyDescriptor()
            }
        }
    }
    

    Итак, чтобы вернуться к предыдущему поведению, добавьте конфигурацию artifact() вrepositores.[maven|ivy].metadataSources блок конфигурации.

...