# ConfigurationContainer

API Documentation: | `ConfigurationContainer`

A `ConfigurationContainer` is responsible for declaring and managing configurations. See also `Configuration`.

You can obtain a `ConfigurationContainer` instance by calling `Project.getConfigurations()`, or using the `configurations` property in your build script.

The configurations in a container are accessible as read-only properties of the container, using the name of the configuration as the property name. For example:

    configurations.add('myConfiguration')
    configurations.myConfiguration.transitive = false

A dynamic method is added for each configuration which takes a configuration closure. This is equivalent to calling `ConfigurationContainer.getByName()`. For example:

    configurations.add('myConfiguration')
    configurations.myConfiguration {
        transitive = false
    }

### Examples

An example showing how to refer to a given configuration by name in order to get hold of all dependencies (e.g. jars, but only)

    apply plugin: 'java' //so that I can use 'compile' configuration

      //copying all dependencies attached to 'compile' into a specific folder
      task copyAllDependencies(type: Copy) {
        //referring to the 'compile' configuration
        from configurations.compile
        into 'allLibs'
      }

An example showing how to declare and configure configurations

    apply plugin: 'java' //so that I can use 'compile', 'testCompile' configurations

    configurations {
      //adding a configuration:
      myConfiguration

      //adding a configuration that extends existing configuration:
      //(testCompile was added by the java plugin)
      myIntegrationTestsCompile.extendsFrom(testCompile)

      //configuring existing configurations not to put transitive dependencies on the compile classpath
      //this way you can avoid issues with implicit dependencies to transitive libraries
      compile.transitive = false
      testCompile.transitive = false
    }

    //Configuring strict conflict strategy - it will fail eagerly if in single configuration
    //there are multiple different versions of the same dependency (group and name are equal).
    configurations.all { resolutionStrategy.failOnVersionConflict() }

### Properties

No properties

### Script blocks

No script blocks

### Methods

Method | Description
`add(name)` | Adds a configuration with the given name.
`add(name, configureClosure)` | Adds a configuration with the given name. The given configuration closure is executed against the configuration before it is returned from this method.
`detachedConfiguration(dependencies)` | Creates a configuration, but does not add it to this container.
`getAt(name)` | Locates an object by name, failing if there is no such task. This method is identical to `NamedDomainObjectCollection.getByName()`. You can call this method in your build script by using the groovy `[]` operator.
`getByName(name)` | Locates an object by name, failing if there is no such object.
`getByName(name, configureClosure)` | Locates an object by name, failing if there is no such object. The given configure closure is executed against the object before it is returned from this method. The object is passed to the closure as it's delegate.

### Method details

#### `Configuration` `add`(`String` name)

Adds a configuration with the given name.

#### `Configuration` `add`(`String` name, `Closure` configureClosure)

Adds a configuration with the given name. The given configuration closure is executed against the configuration before it is returned from this method.

#### `Configuration` `detachedConfiguration`(``Dependency`...` dependencies)

Creates a configuration, but does not add it to this container.

#### `Configuration` `getAt`(`String` name)

Locates an object by name, failing if there is no such task. This method is identical to `NamedDomainObjectCollection.getByName()`. You can call this method in your build script by using the groovy `[]` operator.

#### `Configuration` `getByName`(`String` name)

Locates an object by name, failing if there is no such object.

#### `Configuration` `getByName`(`String` name, `Closure` configureClosure)

Locates an object by name, failing if there is no such object. The given configure closure is executed against the object before it is returned from this method. The object is passed to the closure as it's delegate.