Как получить отсоединенную конфигурацию Gradle для использования стратегии разрешения из плагина блокировки зависимостей?

Мы используем gradle-dependency-lock-plugin. Создается файл global.lock, содержащий список всех зависимостей, используемых нашим проектом.

В одной из наших задач Gradle создается отдельная конфигурация, которая используется для разрешения артефакта. Что я заметил, так это то, что он разрешает его в последнюю версию в Nexus, а не в версию в файле global.lock.

Например, global.lock содержит some-library-10.0.0-ci.3, но разрешенный артефакт находится в some-library-10.0.0-ci.5.

Похоже, это известная проблема с отсоединенными конфигурациями — они не используют стратегию разрешения — как обсуждалось здесь.

Я читал исходный код подключаемого модуля блокировки зависимостей, и, похоже, он устанавливает разрешениеStrategy для всех конфигураций в методе applyLock DependencyLockPlugin.groovy:

project.configurations.all {
    resolutionStrategy {
        force lockForces.toArray()
    }
}

Я надеялся установить стратегию разрешения отдельной конфигурации следующим образом:

def dep = dependencies.create( elastic( "$notation:$version" ) )
def detachedConf = configurations.detachedConfiguration( dep ).setTransitive( false )
detachedConf.resolutionStrategy {
    configurations.all.resolutionStrategy
}
def resolvedArtifacts = detachedConf.resolvedConfiguration.resolvedArtifacts
assert resolvedArtifacts.size() == 1 : 'Only one artifact should be present'
def resolvedArtifact
resolvedArtifacts.each { resolvedArtifact = it }

Однако Gradle жалуется на:

groovy.lang.MissingPropertyException: Could not find property 'resolutionStrategy' on configuration container.

Я переключил его на использование configurations.default.resolutionStrategy и configurations.compile.resolutionStrategy, но в любом случае он продолжал получать доступ к последней версии Nexus.

Как правильно установить стратегию разрешения для отдельной конфигурации, чтобы она использовала ту же стратегию разрешения, что и плагин блокировки зависимостей?


person mustbealennox    schedule 09.07.2015    source источник


Ответы (1)


Правильное решение повлекло за собой установку принудительных модулей стратегии разрешения отдельной конфигурации на одну из других конфигураций:

detachedConf.resolutionStrategy.forcedModules = configurations.install.resolutionStrategy.forcedModules

install — это конфигурация, которую мы используем для доступа к разрешенным артефактам, но это может быть и любая другая конфигурация, поскольку все они используют одну и ту же стратегию разрешения.

person mustbealennox    schedule 09.07.2015