groovy - 如何获取 Gradle 分离配置以使用依赖锁定插件中的解析策略?

标签 groovy gradle gradle-plugin

我们正在使用 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。

这似乎是分离配置的一个已知问题 - 它们不使用解析策略 - 正如 here 所讨论的那样。

我正在阅读依赖锁插件的源代码,它似乎为 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 访问最新版本。

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

最佳答案

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

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

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

关于groovy - 如何获取 Gradle 分离配置以使用依赖锁定插件中的解析策略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31316835/

相关文章:

java - Jenkins 2.0 管道 println 不工作

templates - Grails:将 taglib 中的模板渲染为 HTML

eclipse - Gradle 多项目最佳实践

linux - 设置 Android Studio 的 GRADLE_HOME

java - Gradle 在自定义任务中设置属性

java - 寻找便利工厂来创建 GroovyObjectSupport 实例

groovy - 当 null 作为参数传递时,Groovy 选择了什么重载方法?

loops - 善变的预提交无限循环

gradle - 麻烦的Gradle插件项目与第三方Maven存储库

gradle - 我们可以在 Gradle buildSrc 中定义多个插件类吗