| API文档: | ResolutionStrategy |
|---|
定义围绕依赖解析的策略。例如,强制某些依赖项版本、替换、冲突解决或快照超时。
例子:
plugins {
id 'java' // so that there are some configurations
}
configurations.all {
resolutionStrategy {
// fail eagerly on version conflict (includes transitive dependencies)
// e.g. multiple different versions of the same dependency (group and name are equal)
failOnVersionConflict()
// prefer modules that are part of this build (multi-project or composite build) over external modules
preferProjectModules()
// force certain versions of dependencies (including transitive)
// *append new forced modules:
force 'asm:asm-all:3.3.1', 'commons-io:commons-io:1.4'
// *replace existing forced modules with new ones:
forcedModules = ['asm:asm-all:3.3.1']
// add dependency substitution rules
dependencySubstitution {
substitute module('org.gradle:api') using project(':api')
substitute project(':util') using module('org.gradle:util:3.0')
}
// cache dynamic versions for 10 minutes
cacheDynamicVersionsFor 10*60, 'seconds'
// don't cache changing modules at all
cacheChangingModulesFor 0, 'seconds'
}
}
| 财产 | 描述 |
capabilitiesResolution | 能力解析策略。 |
componentSelection | 当前配置的版本选择规则对象。 |
dependencySubstitution | 为此配置设置的依赖项替换规则集。 |
forcedModules | 返回当前配置的强制模块。有关强制版本的更多信息,请参阅 |
| 方法 | 描述 |
activateDependencyLocking() | 激活 Gradle 中的依赖项锁定支持。打开配置后,可以保存解析结果,然后在后续构建中重复使用。这使得在使用动态版本时可以实现可重复的构建。 |
cacheChangingModulesFor(value, units) | 设置更改模块将被缓存的时间长度,单位表示为字符串。 |
cacheChangingModulesFor(value, units) | 设置更改模块的缓存时间长度。 |
cacheDynamicVersionsFor(value, units) | 设置动态版本的缓存时间长度,单位表示为字符串。 |
cacheDynamicVersionsFor(value, units) | 设置动态版本的缓存时间长度。 |
componentSelection(action) | componentSelection 块提供了过滤或防止某些组件出现在解析结果中的规则。 |
deactivateDependencyLocking() | 停用 Gradle 中的依赖项锁定支持。 |
dependencySubstitution(action) | 为此配置配置依赖项替换规则集。该操作接收一个实例, |
disableDependencyVerification() | 停用此配置的依赖性验证。禁用验证时应始终小心,特别是避免禁用插件验证,因为插件可以使用它来禁用验证本身。 |
eachDependency(rule) | 添加在解析配置时为每个依赖项(包括传递性)触发的依赖项替换规则。该操作接收一个实例 |
enableDependencyVerification() | 为此配置启用依赖性验证。 |
failOnChangingVersions() | 如果调用此方法,Gradle 将确保没有更改的版本参与解析。如果您希望确保构建可重现,而不依赖依赖锁定,则可以使用此方法。 |
failOnDynamicVersions() | 如果调用此方法,Gradle 将确保生成的依赖关系图中没有使用动态版本。实际上,这意味着如果解析的依赖图包含一个模块,并且参与该模块选择的版本至少包含一个动态版本,那么如果解析结果可能因为该版本选择器而改变,解析就会失败。如果您希望确保构建可重现,而不依赖依赖锁定,则可以使用此方法。 |
failOnNonReproducibleResolution() | 配置Gradle构建失败是指解析结果预计不稳定,也就是说它包含动态版本或更改版本,因此结果可能会根据构建执行的时间而变化。此方法相当于同时调用 |
failOnVersionConflict() | 如果发生冲突,Gradle 默认情况下使用最新的冲突版本。但是,您可以更改此行为。使用此方法将解析配置为在任何版本冲突时立即失败,例如同一 |
force(moduleVersionSelectorNotations) | 允许强制某些版本的依赖项,包括传递依赖项。 附加解决依赖关系时要考虑的新的强制模块。 |
getUseGlobalDependencySubstitutionRules() | Gradle 隐式注册整个构建树中所有配置的依赖替换规则,以查找其他包含的构建中的项目。默认情况下,这些规则始终处于活动状态。然而,在某些情况下,某些配置在解析时不应应用这些规则。例如,如果应该发现模块的二进制版本,该模块也由另一个构建中的项目表示。该属性可用于停用这些全局替换规则。 |
preferProjectModules() | Gradle 可以纯粹通过版本号解决冲突,或者优先考虑项目依赖项而不是二进制文件。默认是按版本号。 |
sortArtifacts(sortOrder) | 指定已解决工件的顺序。选项有: |
CapabilitiesResolution capabilitiesResolution(只读)
能力解析策略。
ComponentSelectionRules componentSelection(只读)
当前配置的版本选择规则对象。
DependencySubstitutions dependencySubstitution(只读)
为此配置设置的依赖项替换规则集。
Set<ModuleVersionSelector> forcedModules
Set<ModuleVersionSelector>返回当前配置的强制模块。有关强制版本的更多信息,请参阅ResolutionStrategy.force(java.lang.Object[])
ResolutionStrategy activateDependencyLocking()
激活 Gradle 中的依赖项锁定支持。打开配置后,可以保存解析结果,然后在后续构建中重复使用。这使得在使用动态版本时可以实现可重复的构建。
void cacheChangingModulesFor(int值,String单位)
设置更改模块将被缓存的时间长度,单位表示为字符串。
ResolutionStrategy.cacheChangingModulesFor(int, java.util.concurrent.TimeUnit)将单位表示为字符串的便捷方法。通过使用大写字符串值调用valueOf(String)的方法来解析单位。TimeUnit
void cacheChangingModulesFor(int值,TimeUnit单位)
设置更改模块的缓存时间长度。
Gradle 缓存更改模块的内容和工件。默认情况下,这些缓存值会保留 24 小时,之后缓存条目将过期并再次解析模块。
使用此方法提供自定义到期时间,在此之后任何更改模块的缓存条目都将过期。
void cacheDynamicVersionsFor(int值,String单位)
设置动态版本的缓存时间长度,单位表示为字符串。
ResolutionStrategy.cacheDynamicVersionsFor(int, java.util.concurrent.TimeUnit)将单位表示为字符串的便捷方法。通过使用大写字符串值调用valueOf(String)的方法来解析单位。TimeUnit
void cacheDynamicVersionsFor(int值,TimeUnit单位)
设置动态版本的缓存时间长度。
Gradle 保留动态版本 => 已解析版本的缓存(即 2.+ => 2.3)。默认情况下,这些缓存值会保留 24 小时,之后缓存条目就会过期,并再次解析动态版本。
使用此方法提供自定义到期时间,在此之后任何动态版本的缓存值都将过期。
ResolutionStrategy componentSelection(行动)Action<? super ComponentSelectionRules>
Action<? super ComponentSelectionRules>componentSelection 块提供了过滤或防止某些组件出现在解析结果中的规则。
ResolutionStrategy deactivateDependencyLocking()
停用 Gradle 中的依赖项锁定支持。
ResolutionStrategy dependencySubstitution(行动)Action<? super DependencySubstitutions>
Action<? super DependencySubstitutions>为此配置配置依赖项替换规则集。该操作接收一个实例,DependencySubstitutions然后可以使用替换规则配置该实例。
例子:
// add dependency substitution rules configurations.all { resolutionStrategy.dependencySubstitution { // Substitute project and module dependencies substitute module('org.gradle:api') using project(':api') substitute project(':util') using module('org.gradle:util:3.0') // Substitute one module dependency for another substitute module('org.gradle:api:2.0') using module('org.gradle:api:2.1') } }
ResolutionStrategy disableDependencyVerification()
停用此配置的依赖性验证。禁用验证时应始终小心,特别是避免禁用插件验证,因为插件可以使用它来禁用验证本身。
ResolutionStrategy eachDependency(规则)Action<? super DependencyResolveDetails>
Action<? super DependencyResolveDetails>添加在解析配置时为每个依赖项(包括传递性)触发的依赖项替换规则。该操作接收一个实例DependencyResolveDetails
,可用于找出正在解决的依赖关系并影响解决过程。例子:
configurations {
compileClasspath.resolutionStrategy {
eachDependency { DependencyResolveDetails details ->
//specifying a fixed version for all libraries with 'org.gradle' group
if (details.requested.group == 'org.gradle') {
details.useVersion '1.4'
}
}
eachDependency { details ->
//multiple actions can be specified
if (details.requested.name == 'groovy-all') {
//changing the name:
details.useTarget group: details.requested.group, name: 'groovy', version: details.requested.version
}
}
}
}
规则按照声明的顺序进行评估。应用强制模块后评估规则(请参阅ResolutionStrategy.force(java.lang.Object[])
ResolutionStrategy enableDependencyVerification()
为此配置启用依赖性验证。
ResolutionStrategy failOnChangingVersions()
如果调用此方法,Gradle 将确保没有更改的版本参与解析。如果您希望确保构建可重现,而不依赖依赖锁定,则可以使用此方法。
ResolutionStrategy failOnDynamicVersions()
如果调用此方法,Gradle 将确保生成的依赖关系图中没有使用动态版本。实际上,这意味着如果解析的依赖图包含一个模块,并且参与该模块选择的版本至少包含一个动态版本,那么如果解析结果可能因为该版本选择器而改变,解析就会失败。如果您希望确保构建可重现,而不依赖依赖锁定,则可以使用此方法。
ResolutionStrategy failOnNonReproducibleResolution()
配置Gradle构建失败是指解析结果预计不稳定,也就是说它包含动态版本或更改版本,因此结果可能会根据构建执行的时间而变化。此方法相当于同时调用ResolutionStrategy.failOnDynamicVersions()和
ResolutionStrategy.failOnChangingVersions()。
ResolutionStrategy failOnVersionConflict()
如果发生冲突,Gradle 默认情况下使用最新的冲突版本。但是,您可以更改此行为。使用此方法将解析配置为在任何版本冲突时立即失败,例如同一Configuration.检查包括第一级依赖和传递依赖。请参阅下面的示例:
plugins {
id 'java' // so that there are some configurations
}
configurations.all {
resolutionStrategy.failOnVersionConflict()
}
ResolutionStrategy force(Object...模块版本选择器符号)
Object...允许强制某些版本的依赖项,包括传递依赖项。 附加解决依赖关系时要考虑的新的强制模块。
它接受以下符号:
- 字符串,格式为:'group:name:version',例如:'org.gradle:gradle-core:1.0'
- 的实例
ModuleVersionSelector - 上述任何集合或数组都将自动展平
例子:
plugins {
id 'java' // so that there are some configurations
}
configurations.all {
resolutionStrategy.force 'asm:asm-all:3.3.1', 'commons-io:commons-io:1.4'
}
Gradle 隐式注册整个构建树中所有配置的依赖替换规则,以查找其他包含的构建中的项目。默认情况下,这些规则始终处于活动状态。然而,在某些情况下,某些配置在解析时不应应用这些规则。例如,如果应该发现模块的二进制版本,该模块也由另一个构建中的项目表示。该属性可用于停用这些全局替换规则。
Gradle 可以纯粹通过版本号解决冲突,或者优先考虑项目依赖项而不是二进制文件。默认是按版本号。
这适用于第一级依赖和传递依赖。请参阅下面的示例:
plugins {
id 'java' // so that there are some configurations
}
configurations.all {
resolutionStrategy.preferProjectModules()
}
指定已解决工件的顺序。选项有:
- <UNHANDLED-LINK>SortOrder#DEFAULT</UNHANDLED-LINK>:不指定排序顺序。 Gradle 将按默认顺序提供工件。
- <UNHANDLED-LINK>SortOrder#CONSUMER_FIRST</UNHANDLED-LINK>:使用组件的工件应出现在其依赖项的工件之前。
- <UNHANDLED-LINK>SortOrder#DEPENDENCY_FIRST</UNHANDLED-LINK>:使用组件的工件应出现在其依赖项的工件之后。
将尽最大努力根据提供的 来对工件进行排序SortOrder,但不保证存在依赖循环。注意:对于特定的 Gradle 版本,工件排序将保持一致。对相同输入的多个解析将以相同的顺序产生相同的输出。