# DependencySubstitutions

API Documentation: | `DependencySubstitutions`

Allows replacing dependencies with other dependencies.

### Properties

No properties

### Methods

Method | Description
`all(rule)` | Adds a dependency substitution rule that is triggered for every dependency (including transitive) when the configuration is being resolved. The action receives an instance of `DependencySubstitution` that can be used to find out what dependency is being resolved and to influence the resolution process.
`module(notation)` | Create a ModuleComponentSelector from the provided input string. Strings must be in the format "{group}:{module}:{version}".
`project(path)` | Create a ProjectComponentSelector from the provided input string. Strings must be in the format ":path".
`substitute(substitutedDependency)` | DSL-friendly mechanism to construct a dependency substitution for dependencies matching the provided selector.

### Script blocks

No script blocks

### Method details

#### `DependencySubstitutions` `all`(``Action`<? super `DependencySubstitution`>` rule)

Adds a dependency substitution rule that is triggered for every dependency (including transitive) when the configuration is being resolved. The action receives an instance of `DependencySubstitution` that can be used to find out what dependency is being resolved and to influence the resolution process.

Example:

    configurations { main }
    // add dependency substitution rules
    configurations.main.resolutionStrategy.dependencySubstitution {
      // Use a rule to change the dependency module while leaving group + version intact
      all { DependencySubstitution dependency ->
        if (dependency.requested instanceof ModuleComponentSelector && dependency.requested.module == 'groovy-all') {
          dependency.useTarget dependency.requested.group + ':groovy:' + dependency.requested.version
        }
      }
      // Use a rule to replace all missing projects with module dependencies
      all { DependencySubstitution dependency ->
       if (dependency.requested instanceof ProjectComponentSelector) {
          def targetProject = findProject(":${dependency.requested.path}")
          if (targetProject == null) {
            dependency.useTarget "org.myorg:" + dependency.requested.path + ":+"
          }
        }
      }
    }

The rules are evaluated in order they are declared. Rules are evaluated after forced modules are applied (see `ResolutionStrategy.force(java.lang.Object[])`

#### `ComponentSelector` `module`(`String` notation)

Create a ModuleComponentSelector from the provided input string. Strings must be in the format "{group}:{module}:{version}".

#### `ComponentSelector` `project`(`String` path)

Create a ProjectComponentSelector from the provided input string. Strings must be in the format ":path".

#### `Substitution` `substitute`(`ComponentSelector` substitutedDependency)

DSL-friendly mechanism to construct a dependency substitution for dependencies matching the provided selector.

Examples:

    configurations { main }
    configurations.main.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')
    }