Interface ResolutionStrategy
Examples:
apply plugin: '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') with project(':api') substitute project(':util') with 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' } }
- Since:
- 1.0-milestone-6
-
Nested Class Summary
Nested ClassesModifier and TypeInterfaceDescriptionstatic enum
Defines the sort order for components and artifacts produced by the configuration. -
Method Summary
Modifier and TypeMethodDescriptionvoid
cacheChangingModulesFor
(int value, String units) Sets the length of time that changing modules will be cached, with units expressed as a String.void
cacheChangingModulesFor
(int value, TimeUnit units) Sets the length of time that changing modules will be cached.void
cacheDynamicVersionsFor
(int value, String units) Sets the length of time that dynamic versions will be cached, with units expressed as a String.void
cacheDynamicVersionsFor
(int value, TimeUnit units) Sets the length of time that dynamic versions will be cached.componentSelection
(Action<? super ComponentSelectionRules> action) The componentSelection block provides rules to filter or blacklist certain components from appearing in the resolution result.dependencySubstitution
(Action<? super DependencySubstitutions> action) Configures the set of dependency substitution rules for this configuration.eachDependency
(Action<? super DependencyResolveDetails> rule) Adds a dependency substitution rule that is triggered for every dependency (including transitive) when the configuration is being resolved.In case of conflict, Gradle by default uses the newest of conflicting versions.Allows forcing certain versions of dependencies, including transitive dependencies.Returns the currently configured version selection rules object.Returns the set of dependency substitution rules that are set for this configuration.Returns currently configured forced modules.void
Gradle can resolve conflicts purely by version number or prioritize project dependencies over binary.setForcedModules
(Object... moduleVersionSelectorNotations) Allows forcing certain versions of dependencies, including transitive dependencies.void
sortArtifacts
(ResolutionStrategy.SortOrder sortOrder) Specifies the ordering for resolved artifacts.
-
Method Details
-
failOnVersionConflict
ResolutionStrategy failOnVersionConflict()In case of conflict, Gradle by default uses the newest of conflicting versions. However, you can change this behavior. Use this method to configure the resolution to fail eagerly on any version conflict, e.g. multiple different versions of the same dependency (group and name are equal) in the sameConfiguration
. The check includes both first level and transitive dependencies. See example below:apply plugin: 'java' //so that there are some configurations configurations.all { resolutionStrategy.failOnVersionConflict() }
- Returns:
- this resolution strategy instance
- Since:
- 1.0-milestone-6
-
preferProjectModules
Gradle can resolve conflicts purely by version number or prioritize project dependencies over binary. The default is by version number.This applies to both first level and transitive dependencies. See example below:
apply plugin: 'java' //so that there are some configurations configurations.all { resolutionStrategy.preferProjectModules() }
- Since:
- 3.2
-
force
Allows forcing certain versions of dependencies, including transitive dependencies. Appends new forced modules to be considered when resolving dependencies.It accepts following notations:
- String in a format of: 'group:name:version', for example: 'org.gradle:gradle-core:1.0'
- instance of
ModuleVersionSelector
- any collection or array of above will be automatically flattened
apply plugin: 'java' //so that there are some configurations configurations.all { resolutionStrategy.force 'asm:asm-all:3.3.1', 'commons-io:commons-io:1.4' }
- Parameters:
moduleVersionSelectorNotations
- typically group:name:version notations to append- Returns:
- this ResolutionStrategy instance
- Since:
- 1.0-milestone-7
-
setForcedModules
Allows forcing certain versions of dependencies, including transitive dependencies. Replaces existing forced modules with the input.For information on notations see
force(Object...)
Example:
apply plugin: 'java' //so that there are some configurations configurations.all { resolutionStrategy.forcedModules = ['asm:asm-all:3.3.1', 'commons-io:commons-io:1.4'] }
- Parameters:
moduleVersionSelectorNotations
- typically group:name:version notations to set- Returns:
- this ResolutionStrategy instance
- Since:
- 1.0-milestone-7
-
getForcedModules
Set<ModuleVersionSelector> getForcedModules()Returns currently configured forced modules. For more information on forcing versions seeforce(Object...)
- Returns:
- forced modules
- Since:
- 1.0-milestone-7
-
eachDependency
Adds a dependency substitution rule that is triggered for every dependency (including transitive) when the configuration is being resolved. The action receives an instance ofDependencyResolveDetails
that can be used to find out what dependency is being resolved and to influence the resolution process. Example:configurations { compile.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 } } } }
The rules are evaluated in order they are declared. Rules are evaluated after forced modules are applied (seeforce(Object...)
- Returns:
- this
- Since:
- 1.4
-
cacheDynamicVersionsFor
Sets the length of time that dynamic versions will be cached, with units expressed as a String.A convenience method for
cacheDynamicVersionsFor(int, java.util.concurrent.TimeUnit)
with units expressed as a String. Units are resolved by calling thevalueOf(String)
method ofTimeUnit
with the upper-cased string value.- Parameters:
value
- The number of time unitsunits
- The units- Since:
- 1.0-milestone-6
-
cacheDynamicVersionsFor
Sets the length of time that dynamic versions will be cached.Gradle keeps a cache of dynamic version => resolved version (ie 2.+ => 2.3). By default, these cached values are kept for 24 hours, after which the cached entry is expired and the dynamic version is resolved again.
Use this method to provide a custom expiry time after which the cached value for any dynamic version will be expired.
- Parameters:
value
- The number of time unitsunits
- The units- Since:
- 1.0-milestone-6
-
cacheChangingModulesFor
Sets the length of time that changing modules will be cached, with units expressed as a String.A convenience method for
cacheChangingModulesFor(int, java.util.concurrent.TimeUnit)
with units expressed as a String. Units are resolved by calling thevalueOf(String)
method ofTimeUnit
with the upper-cased string value.- Parameters:
value
- The number of time unitsunits
- The units- Since:
- 1.0-milestone-6
-
cacheChangingModulesFor
Sets the length of time that changing modules will be cached.Gradle caches the contents and artifacts of changing modules. By default, these cached values are kept for 24 hours, after which the cached entry is expired and the module is resolved again.
Use this method to provide a custom expiry time after which the cached entries for any changing module will be expired.
- Parameters:
value
- The number of time unitsunits
- The units- Since:
- 1.0-milestone-6
-
getComponentSelection
Returns the currently configured version selection rules object.- Returns:
- the version selection rules
- Since:
- 2.2
-
componentSelection
The componentSelection block provides rules to filter or blacklist certain components from appearing in the resolution result.- Parameters:
action
- Action to be applied to theComponentSelectionRules
- Returns:
- this ResolutionStrategy instance
- Since:
- 2.2
-
getDependencySubstitution
Returns the set of dependency substitution rules that are set for this configuration.- Since:
- 2.5
-
dependencySubstitution
@Incubating ResolutionStrategy dependencySubstitution(Action<? super DependencySubstitutions> action) Configures the set of dependency substitution rules for this configuration. The action receives an instance ofDependencySubstitutions
which can then be configured with substitution rules.Examples:
// add dependency substitution rules configurations.all { resolutionStrategy.dependencySubstitution { // Substitute project and module dependencies substitute module('org.gradle:api') with project(':api') substitute project(':util') with module('org.gradle:util:3.0') // Substitute one module dependency for another substitute module('org.gradle:api:2.0') with module('org.gradle:api:2.1') } }
- Returns:
- this ResolutionStrategy instance
- Since:
- 2.5
- See Also:
-
sortArtifacts
Specifies the ordering for resolved artifacts. Options are:ResolutionStrategy.SortOrder.DEFAULT
: Don't specify the sort order. Gradle will provide artifacts in the default order.ResolutionStrategy.SortOrder.CONSUMER_FIRST
: Artifacts for a consuming component should appear before artifacts for it's dependencies.ResolutionStrategy.SortOrder.DEPENDENCY_FIRST
: Artifacts for a consuming component should appear after artifacts for it's dependencies.
ResolutionStrategy.SortOrder
, but no guarantees will be made in the presence of dependency cycles. NOTE: For a particular Gradle version, artifact ordering will be consistent. Multiple resolves for the same inputs will result in the same outputs in the same order.- Since:
- 3.5
-