Package: org.gradle.api.plugins

## [Java] Interface PluginContainer

- org.gradle.api.DomainObjectSet

- All Superinterfaces:
    Iterable, DomainObjectCollection, PluginCollection, Collection, DomainObjectSet

  A `PluginContainer` is used to manage a set of Plugin instances applied to a particular project.

  Plugins can be specified using either an id or type. The id of a plugin is specified using a META-INF/gradle-plugins/${id}.properties classpath resource.

- - ### Methods Summary

    Methods
    Type | Name and description
    --- | ---
    `Plugin` | `apply(String id)` Has the same behavior as apply(Class) except that the plugin is specified via its id.
    `T` | `apply(Class<T> type)` Applies a plugin to the project.
    `Plugin` | `findPlugin(String id)` Returns the plugin for the given id.
    `T` | `findPlugin(Class<T> type)` Returns the plugin for the given type.
    `Plugin` | `getAt(String id)` Returns a plugin with the specified id if this plugin has been used in the project.
    `T` | `getAt(Class<T> type)` Returns a plugin with the specified type if this plugin has been used in the project.
    `Plugin` | `getPlugin(String id)` Returns a plugin with the specified id if this plugin has been used in the project.
    `T` | `getPlugin(Class<T> type)` Returns a plugin with the specified type if this plugin has been used in the project.
    `boolean` | `hasPlugin(String id)` Returns true if the container has a plugin with the given id, false otherwise.
    `boolean` | `hasPlugin(Class<? extends Plugin> type)` Returns true if the container has a plugin with the given type, false otherwise.
    `void` | `withId(String pluginId, Action<? super Plugin> action)` Executes or registers an action for a plugin with given id.

  - ### Inherited Methods Summary

    Inherited Methods
    Methods inherited from class | Name
    --- | ---
    `interface PluginCollection` | `matching, matching, whenPluginAdded, whenPluginAdded, withType`
    `interface DomainObjectSet` | `findAll, matching, matching, withType`
    `interface DomainObjectCollection` | `all, all, findAll, matching, matching, whenObjectAdded, whenObjectAdded, whenObjectRemoved, whenObjectRemoved, withType, withType, withType`
    `interface Set` | `add, equals, hashCode, clear, contains, isEmpty, size, toArray, toArray, addAll, iterator, remove, containsAll, removeAll, retainAll`

- - ### Method Detail

    - #### public Plugin apply(String id)

      Has the same behavior as apply(Class) except that the plugin is specified via its id. Not all plugins have an id.

      Parameters:
        `id` - The id of the plugin to be applied.
      Returns:
        The plugin which has been used against the project.

    - #### public T apply(Class<T> type)

      Applies a plugin to the project. This usually means that the plugin uses the project API to add and modify the state of the project. This method can be called an arbitrary number of times for a particular plugin type. The plugin will be actually used only the first time this method is called.

      Parameters:
        `type` - The type of the plugin to be used
      Returns:
        The plugin which has been used against the project.

    - #### public Plugin findPlugin(String id)

      Returns the plugin for the given id.

      Parameters:
        `id` - The id of the plugin
      Returns:
        the plugin or null if no plugin for the given id exists.

    - #### public T findPlugin(Class<T> type)

      Returns the plugin for the given type.

      Parameters:
        `type` - The type of the plugin
      Returns:
        the plugin or null if no plugin for the given type exists.

    - #### public Plugin getAt(String id)

      Returns a plugin with the specified id if this plugin has been used in the project. You can use the Groovy `[]` operator to call this method from a build script.

      throws:
        UnknownPluginException When there is no plugin with the given id.
      Parameters:
        `id` - The id of the plugin

    - #### public T getAt(Class<T> type)

      Returns a plugin with the specified type if this plugin has been used in the project. You can use the Groovy `[]` operator to call this method from a build script.

      throws:
        UnknownPluginException When there is no plugin with the given type.
      Parameters:
        `type` - The type of the plugin

    - #### public Plugin getPlugin(String id)

      Returns a plugin with the specified id if this plugin has been used in the project.

      throws:
        UnknownPluginException When there is no plugin with the given id.
      Parameters:
        `id` - The id of the plugin

    - #### public T getPlugin(Class<T> type)

      Returns a plugin with the specified type if this plugin has been used in the project.

      throws:
        UnknownPluginException When there is no plugin with the given type.
      Parameters:
        `type` - The type of the plugin

    - #### public boolean hasPlugin(String id)

      Returns true if the container has a plugin with the given id, false otherwise.

      Parameters:
        `id` - The id of the plugin

    - #### public boolean hasPlugin(Class<? extends Plugin> type)

      Returns true if the container has a plugin with the given type, false otherwise.

      Parameters:
        `type` - The type of the plugin

    - #### @Incubating public void withId(String pluginId, Action<? super Plugin> action)

      Executes or registers an action for a plugin with given id. If the plugin was already applied, the action is executed. If the plugin is applied sometime later the action will be executed after the plugin is applied. If the plugin is never applied, the action is never executed. The behavior is similar to withType(Class, org.gradle.api.Action).

      Parameters:
        `pluginId` - the id of the plugin
        `action` - the action