0

我们正在使用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 访问最新版本。

如何正确设置分离配置的解析策略,使其使用与依赖锁定插件设置的相同解析策略?

4

1 回答 1

0

正确的解决方案需要将分离配置的解析策略的强制模块设置为其他配置之一:

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

install是我们用于访问已解析工件的配置,但它可以是任何其他配置,因为它们都使用相同的解析策略。

于 2015-07-09T20:33:54.777 回答