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) | 为此配置配置依赖项替换规则集。该 action 接收一个 |
disableDependencyVerification() | 为此配置禁用依赖项验证。在禁用验证时应始终小心,尤其要避免为插件验证禁用它,因为插件可以使用它来禁用自身验证。 |
eachDependency(rule) | 添加一个依赖项替换规则,该规则在配置正在解析时为每个依赖项(包括传递依赖项)触发。该 action 接收一个 |
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
value, String
units)
设置缓存更改模块的时间长度,单位表示为字符串。
用于 ResolutionStrategy.cacheChangingModulesFor(int, java.util.concurrent.TimeUnit)
的便捷方法,单位表示为字符串。单位通过调用 TimeUnit
的 valueOf(String)
方法和使用大写的字符串值来解析。
void
cacheChangingModulesFor
(int
value, TimeUnit
units)
设置缓存更改模块的时间长度。
Gradle 缓存更改模块的内容和工件。默认情况下,这些缓存值保留 24 小时,之后缓存条目过期,模块再次解析。
使用此方法提供自定义过期时间,在此之后,任何更改模块的缓存条目都将过期。
void
cacheDynamicVersionsFor
(int
value, String
units)
设置缓存动态版本的时间长度,单位表示为字符串。
用于 ResolutionStrategy.cacheDynamicVersionsFor(int, java.util.concurrent.TimeUnit)
的便捷方法,单位表示为字符串。单位通过调用 TimeUnit
的 valueOf(String)
方法和使用大写的字符串值来解析。
void
cacheDynamicVersionsFor
(int
value, TimeUnit
units)
设置缓存动态版本的时间长度。
Gradle 保留动态版本 => 已解析版本(即 2.+ => 2.3)的缓存。默认情况下,这些缓存值保留 24 小时,之后缓存条目过期,动态版本再次解析。
使用此方法提供自定义过期时间,在此之后,任何动态版本的缓存值都将过期。
ResolutionStrategy
componentSelection
(Action
<? super ComponentSelectionRules
>
action)
Action
<? super ComponentSelectionRules
>componentSelection 块提供规则来过滤或阻止某些组件出现在解析结果中。
ResolutionStrategy
deactivateDependencyLocking
()
在 Gradle 中停用依赖项锁定支持。
ResolutionStrategy
dependencySubstitution
(Action
<? super DependencySubstitutions
>
action)
Action
<? super DependencySubstitutions
>为此配置配置依赖项替换规则集。该 action 接收一个 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
>
rule)
Action
<? super DependencyResolveDetails
>添加一个依赖项替换规则,该规则在配置正在解析时为每个依赖项(包括传递依赖项)触发。该 action 接收一个 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
...
moduleVersionSelectorNotations)
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 版本,工件排序将是一致的。对相同输入的多次解析将导致相同的输出,并保持相同的顺序。