我们正在使用gradle-dependency-lock-plugin。生成global.lock文件,其中包含项目使用的所有依赖项的列表。
在我们的一个Gradle任务中,创建了一个分离配置并用于解析工件。我注意到它将它解析为Nexus中的最新版本,而不是global.lock文件中的版本。
例如,global.lock包含some-library-10.0.0-ci.3,但已解析的工件位于某个库10.0.0-ci.5。
这似乎是已知的分离配置问题 - 他们没有使用解决方案策略 - 正如所讨论的那样here。
我正在阅读dependency-lock插件的源代码,它似乎为DependencyLockPlugin.groovy的applyLock方法中的所有配置设置了resolutionStrategy:
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 }
我希望设置分离配置的解决策略:
groovy.lang.MissingPropertyException: Could not find property 'resolutionStrategy' on configuration container.
然而,Gradle抱怨:
if let cardArray: AnyObject = plistDict["array"] {
我将其切换为使用configurations.default.resolutionStrategy和configurations.compile.resolutionStrategy,但在任何一种情况下,它都继续从Nexus访问最新版本。
如何正确设置分离配置的解析策略,以便它使用与依赖锁定插件设置的相同的解析策略?
答案 0 :(得分:0)
正确的解决方案需要将分离配置的解析策略的forcedModules设置为其他配置之一:
detachedConf.resolutionStrategy.forcedModules = configurations.install.resolutionStrategy.forcedModules
install 是我们用于访问已解决的工件的配置,但它可以是任何其他配置,因为它们都使用相同的解析策略。