API Documentation: | ResolutionStrategy |
---|
Defines the strategies around dependency resolution. For example, forcing certain dependency versions, conflict resolutions or snapshot timeouts.
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() // 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 a dependency resolve rule eachDependency { DependencyResolveDetails details -> //specifying a fixed version for all libraries with 'org.gradle' group if (details.requested.group == 'org.gradle') { details.useVersion'1.4' } //changing 'groovy-all' into 'groovy': if (details.requested.name == 'groovy-all') { details.useTarget group: details.requested.group, name: 'groovy', version: details.requested.version } } // cache dynamic versions for 10 minutes cacheDynamicVersionsFor 10*60, 'seconds' // don't cache changing modules at all cacheChangingModulesFor 0, 'seconds' } }
Property | Description |
componentSelection | Incubating The currently configured version selection rules object. |
forcedModules | Returns currently configured forced modules. For more information on forcing versions see |
Method | Description |
cacheChangingModulesFor(value, units) | Sets the length of time that changing modules will be cached, with units expressed as a String. |
cacheChangingModulesFor(value, units) | Sets the length of time that changing modules will be cached. |
cacheDynamicVersionsFor(value, units) | Sets the length of time that dynamic versions will be cached, with units expressed as a String. |
cacheDynamicVersionsFor(value, units) | Sets the length of time that dynamic versions will be cached. |
componentSelection(action) | Incubating The componentSelection block provides rules for how versions should be selected. This is useful for defining your own version scheme. |
eachDependency(rule) | Incubating Adds a dependency resolve rule that is triggered for every dependency (including transitive)
when the configuration is being resolved. The action receives an instance of |
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 same |
force(moduleVersionSelectorNotations) | Allows forcing certain versions of dependencies, including transitive dependencies. Appends new forced modules to be considered when resolving dependencies. |
ComponentSelectionRules
componentSelection
(read-only)
Note: This property is incubating and may change in a future version of Gradle.
The currently configured version selection rules object.
Set
<ModuleVersionSelector
>
forcedModules
Set
<ModuleVersionSelector
>Returns currently configured forced modules. For more information on forcing versions see ResolutionStrategy.force()
void
cacheChangingModulesFor
(int
value, String
units)
Sets the length of time that changing modules will be cached, with units expressed as a String.
A convenience method for ResolutionStrategy.cacheChangingModulesFor()
with units expressed as a String.
Units are resolved by calling the valueOf(String)
method of TimeUnit
with the upper-cased string value.
void
cacheChangingModulesFor
(int
value, TimeUnit
units)
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.
void
cacheDynamicVersionsFor
(int
value, String
units)
Sets the length of time that dynamic versions will be cached, with units expressed as a String.
A convenience method for ResolutionStrategy.cacheDynamicVersionsFor()
with units expressed as a String.
Units are resolved by calling the valueOf(String)
method of TimeUnit
with the upper-cased string value.
void
cacheDynamicVersionsFor
(int
value, TimeUnit
units)
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.
ResolutionStrategy
componentSelection
(Action
<? super ComponentSelectionRules
>
action)
Action
<? super ComponentSelectionRules
>Note: This method is incubating and may change in a future version of Gradle.
The componentSelection block provides rules for how versions should be selected. This is useful for defining your own version scheme.
ResolutionStrategy
eachDependency
(Action
<? super DependencyResolveDetails
>
rule)
Action
<? super DependencyResolveDetails
>Note: This method is incubating and may change in a future version of Gradle.
Adds a dependency resolve rule that is triggered for every dependency (including transitive)
when the configuration is being resolved. The action receives an instance of DependencyResolveDetails
that can be used to find out what dependency is being resolved and to influence the resolution process.
Example:
apply plugin: 'java' //so that there are some configurations configurations.all { 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 (see ResolutionStrategy.force()
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 same Configuration
.
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() }
ResolutionStrategy
force
(Object
...
moduleVersionSelectorNotations)
Object
...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
Example:
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' }