解决策略

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

返回当前配置的强制模块。有关强制版本的更多信息,请参阅ResolutionStrategy.force(java.lang.Object[])

方法

方法描述
activateDependencyLocking()

激活 Gradle 中的依赖项锁定支持。打开配置后,可以保存解析结果,然后在后续构建中重复使用。这使得在使用动态版本时可以实现可重复的构建。

cacheChangingModulesFor(value, units)

设置更改模块将被缓存的时间长度,单位表示为字符串。

cacheChangingModulesFor(value, units)

设置更改模块的缓存时间长度。

cacheDynamicVersionsFor(value, units)

设置动态版本的缓存时间长度,单位表示为字符串。

cacheDynamicVersionsFor(value, units)

设置动态版本的缓存时间长度。

componentSelection(action)

componentSelection 块提供了过滤或防止某些组件出现在解析结果中的规则。

deactivateDependencyLocking()

停用 Gradle 中的依赖项锁定支持。

dependencySubstitution(action)

为此配置配置依赖项替换规则集。该操作接收一个实例,DependencySubstitutions然后可以使用替换规则配置该实例。

disableDependencyVerification()

停用此配置的依赖性验证。禁用验证时应始终小心,特别是避免禁用插件验证,因为插件可以使用它来禁用验证本身。

eachDependency(rule)

添加在解析配置时为每个依赖项(包括传递性)触发的依赖项替换规则。该操作接收一个实例DependencyResolveDetails ,可用于找出正在解决的依赖关系并影响解决过程。例子:

enableDependencyVerification()

为此配置启用依赖性验证。

failOnChangingVersions()

如果调用此方法,Gradle 将确保没有更改的版本参与解析。如果您希望确保构建可重现,而不依赖依赖锁定,则可以使用此方法。

failOnDynamicVersions()

如果调用此方法,Gradle 将确保生成的依赖关系图中没有使用动态版本。实际上,这意味着如果解析的依赖图包含一个模块,并且参与该模块选择的版本至少包含一个动态版本,那么如果解析结果可能因为该版本选择器而改变,解析就会失败。如果您希望确保构建可重现,而不依赖依赖锁定,则可以使用此方法。

failOnNonReproducibleResolution()

配置Gradle构建失败是指解析结果预计不稳定,也就是说它包含动态版本或更改版本,因此结果可能会根据构建执行的时间而变化。此方法相当于同时调用ResolutionStrategy.failOnDynamicVersions()ResolutionStrategy.failOnChangingVersions()

failOnVersionConflict()

如果发生冲突,Gradle 默认情况下使用最新的冲突版本。但是,您可以更改此行为。使用此方法将解析配置为在任何版本冲突时立即失败,例如同一Configuration.检查包括第一级依赖和传递依赖。请参阅下面的示例:

force(moduleVersionSelectorNotations)

允许强制某些版本的依赖项,包括传递依赖项。 附加解决依赖关系时要考虑的新的强制模块。

getUseGlobalDependencySubstitutionRules()

Gradle 隐式注册整个构建树中所有配置的依赖替换规则,以查找其他包含的构建中的项目。默认情况下,这些规则始终处于活动状态。然而,在某些情况下,某些配置在解析时不应应用这些规则。例如,如果应该发现模块的二进制版本,该模块也由另一个构建中的项目表示。该属性可用于停用这些全局替换规则。

preferProjectModules()

Gradle 可以纯粹通过版本号解决冲突,或者优先考虑项目依赖项而不是二进制文件。默认是按版本号

sortArtifacts(sortOrder)

指定已解决工件的顺序。选项有:

脚本块

无脚本块

物业详情

CapabilitiesResolution capabilitiesResolution(只读)

能力解析策略。

ComponentSelectionRules componentSelection(只读)

当前配置的版本选择规则对象。

DependencySubstitutions dependencySubstitution(只读)

为此配置设置的依赖项替换规则集。

Set<ModuleVersionSelector> forcedModules

返回当前配置的强制模块。有关强制版本的更多信息,请参阅ResolutionStrategy.force(java.lang.Object[])

方法详情

ResolutionStrategy activateDependencyLocking()

激活 Gradle 中的依赖项锁定支持。打开配置后,可以保存解析结果,然后在后续构建中重复使用。这使得在使用动态版本时可以实现可重复的构建。

void cacheChangingModulesForint值,String单位)

设置更改模块将被缓存的时间长度,单位表示为字符串。

ResolutionStrategy.cacheChangingModulesFor(int, java.util.concurrent.TimeUnit)将单位表示为字符串的便捷方法。通过使用大写字符串值调用valueOf(String)的方法来解析单位。TimeUnit

void cacheChangingModulesForint值,TimeUnit单位)

设置更改模块的缓存时间长度。

Gradle 缓存更改模块的内容和工件。默认情况下,这些缓存值会保留 24 小时,之后缓存条目将过期并再次解析模块。

使用此方法提供自定义到期时间,在此之后任何更改模块的缓存条目都将过期。

void cacheDynamicVersionsForint值,String单位)

设置动态版本的缓存时间长度,单位表示为字符串。

ResolutionStrategy.cacheDynamicVersionsFor(int, java.util.concurrent.TimeUnit)将单位表示为字符串的便捷方法。通过使用大写字符串值调用valueOf(String)的方法来解析单位。TimeUnit

void cacheDynamicVersionsForint值,TimeUnit单位)

设置动态版本的缓存时间长度。

Gradle 保留动态版本 => 已解析版本的缓存(即 2.+ => 2.3)。默认情况下,这些缓存值会保留 24 小时,之后缓存条目就会过期,并再次解析动态版本。

使用此方法提供自定义到期时间,在此之后任何动态版本的缓存值都将过期。

ResolutionStrategy componentSelection(行动)Action<? super ComponentSelectionRules>

componentSelection 块提供了过滤或防止某些组件出现在解析结果中的规则。

ResolutionStrategy deactivateDependencyLocking()

停用 Gradle 中的依赖项锁定支持。

ResolutionStrategy dependencySubstitution(行动)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>

添加在解析配置时为每个依赖项(包括传递性)触发的依赖项替换规则。该操作接收一个实例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 forceObject...模块版本选择器符号)

允许强制某些版本的依赖项,包括传递依赖项。 附加解决依赖关系时要考虑的新的强制模块。

它接受以下符号:

  • 字符串,格式为:'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'
}

Property<Boolean> getUseGlobalDependencySubstitutionRules()

Gradle 隐式注册整个构建树中所有配置的依赖替换规则,以查找其他包含的构建中的项目。默认情况下,这些规则始终处于活动状态。然而,在某些情况下,某些配置在解析时不应应用这些规则。例如,如果应该发现模块的二进制版本,该模块也由另一个构建中的项目表示。该属性可用于停用这些全局替换规则。

void preferProjectModules()

Gradle 可以纯粹通过版本号解决冲突,或者优先考虑项目依赖项而不是二进制文件。默认是按版本号

这适用于第一级依赖和传递依赖。请参阅下面的示例:

plugins {
    id 'java' // so that there are some configurations
}

configurations.all {
  resolutionStrategy.preferProjectModules()
}

void sortArtifactsSortOrder排序)

指定已解决工件的顺序。选项有:

  • <UNHANDLED-LINK>SortOrder#DEFAULT</UNHANDLED-LINK>:不指定排序顺序。 Gradle 将按默认顺序提供工件。
  • <UNHANDLED-LINK>SortOrder#CONSUMER_FIRST</UNHANDLED-LINK>:使用组件的工件应出现在其依赖项的工件之前。
  • <UNHANDLED-LINK>SortOrder#DEPENDENCY_FIRST</UNHANDLED-LINK>:使用组件的工件应出现在其依赖项的工件之后。

将尽最大努力根据提供的 来对工件进行排序SortOrder,但不保证存在依赖循环。注意:对于特定的 Gradle 版本,工件排序将保持一致。对相同输入的多个解析将以相同的顺序产生相同的输出。