如何获得 Gradle 分离配置以使用依赖锁插件的解析策略?
How to get a Gradle detached configuration to use a resolution strategy from the dependency-lock plugin?
我们正在使用gradle-dependency-lock-plugin。生成了一个 global.lock 文件,其中包含我们项目使用的所有依赖项的列表ci。
在我们的一项 Gradle 任务中,创建了一个分离的配置并用于解析工件。我注意到它将它解析为 Nexus 中的最新版本,而不是 global.lock 文件中的版本。
例如,global.lock 包含 some-library-10.0.0-ci.3 但已解析的工件位于 some-library-10.0.0-ci.5 .
这似乎是分离配置的一个已知问题 - 它们不使用解析策略 - 正如所讨论的 here。
我正在阅读 dependency-lock 插件的源代码,它似乎在 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 访问最新版本。
如何正确设置分离配置的解析策略,使其使用与 dependency-lock 插件设置的解析策略相同?
正确的解决方案需要将分离配置的解析策略的 forcedModules 设置为其他配置之一:
detachedConf.resolutionStrategy.forcedModules = configurations.install.resolutionStrategy.forcedModules
install 是我们用于访问已解析工件的配置,但它可以是任何其他配置,因为它们都使用相同的解析策略。
我们正在使用gradle-dependency-lock-plugin。生成了一个 global.lock 文件,其中包含我们项目使用的所有依赖项的列表ci。
在我们的一项 Gradle 任务中,创建了一个分离的配置并用于解析工件。我注意到它将它解析为 Nexus 中的最新版本,而不是 global.lock 文件中的版本。
例如,global.lock 包含 some-library-10.0.0-ci.3 但已解析的工件位于 some-library-10.0.0-ci.5 .
这似乎是分离配置的一个已知问题 - 它们不使用解析策略 - 正如所讨论的 here。
我正在阅读 dependency-lock 插件的源代码,它似乎在 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 访问最新版本。
如何正确设置分离配置的解析策略,使其使用与 dependency-lock 插件设置的解析策略相同?
正确的解决方案需要将分离配置的解析策略的 forcedModules 设置为其他配置之一:
detachedConf.resolutionStrategy.forcedModules = configurations.install.resolutionStrategy.forcedModules
install 是我们用于访问已解析工件的配置,但它可以是任何其他配置,因为它们都使用相同的解析策略。