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 版本,工件排序将保持一致。对相同输入的多个解析将以相同的顺序产生相同的输出。