Мы используем 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.
Как правильно установить стратегию разрешения для отдельной конфигурации, чтобы она использовала ту же стратегию разрешения, что и плагин блокировки зависимостей?