我们正在使用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。
这似乎是分离配置的一个已知问题 - 它们不使用解析策略 - 如此处所述。
我正在阅读依赖锁插件的源代码,它似乎为 DependencyLockPlugin.groovy 的 applyLock 方法中的所有配置设置了 resolutionStrategy:
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 访问最新版本。
如何正确设置分离配置的解析策略,使其使用与依赖锁定插件设置的相同解析策略?