# Interface PluginAware

All Known Subinterfaces:
  `Gradle, Project, Settings`

public interface PluginAware
Something that can have plugins applied to it.

The `plugin manager` can be used for applying and detecting whether plugins have been applied.

For more on writing and applying plugins, see `Plugin`.

Since:
  1.6

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `apply(Closure closure)`
  Applies zero or more plugins or scripts.
  `void`
  `apply(Map<String,?> options)`
  Applies a plugin or script, using the given options provided as a map.
  `void`
  `apply(Action<? super ObjectConfigurationAction> action)`
  Applies zero or more plugins or scripts.
  `PluginManager`
  `getPluginManager()`
  The plugin manager for this plugin aware object.
  `PluginContainer`
  `getPlugins()`
  The container of plugins that have been applied to this object.

- ## Method Details

  - ### getPlugins

    PluginContainer getPlugins()
    The container of plugins that have been applied to this object.

    While not deprecated, it is preferred to use the methods of this interface or the `plugin manager` than use the plugin container.

    Use one of the 'apply' methods on this interface or on the `plugin manager` to apply plugins instead of applying via the plugin container.

    Use `PluginManager.hasPlugin(String)` or similar to query for the application of plugins instead of doing so via the plugin container.

    Returns:
      the plugin container
    Since:
      1.6
    See Also:
      - `apply(Closure)`
      - `PluginManager.hasPlugin(String)`

  - ### apply

    void apply(@DelegatesTo(ObjectConfigurationAction.class) Closure closure)
    Applies zero or more plugins or scripts.

    The given closure is used to configure an `ObjectConfigurationAction`, which "builds" the plugin application.

    This method differs from `apply(java.util.Map)` in that it allows methods of the configuration action to be invoked more than once.

    Parameters:
      `closure` - the closure to configure an `ObjectConfigurationAction` with before "executing" it
    Since:
      1.6
    See Also:
      - `apply(java.util.Map)`

  - ### apply

    void apply(Action<? super ObjectConfigurationAction> action)
    Applies zero or more plugins or scripts.

    The given closure is used to configure an `ObjectConfigurationAction`, which "builds" the plugin application.

    This method differs from `apply(java.util.Map)` in that it allows methods of the configuration action to be invoked more than once.

    Parameters:
      `action` - the action to configure an `ObjectConfigurationAction` with before "executing" it
    Since:
      2.3
    See Also:
      - `apply(java.util.Map)`

  - ### apply

    void apply(Map<String,?> options)
    Applies a plugin or script, using the given options provided as a map. Does nothing if the plugin has already been applied.

    The given map is applied as a series of method calls to a newly created `ObjectConfigurationAction`. That is, each key in the map is expected to be the name of a method `ObjectConfigurationAction` and the value to be compatible arguments to that method.

    The following options are available:

    - `from`: A script to apply. Accepts any path supported by `Project.uri(Object)`.
    - `plugin`: The id or implementation class of the plugin to apply.
    - `to`: The target delegate object or objects. The default is this plugin aware object. Use this to configure objects other than this object.
    Parameters:
      `options` - the options to use to configure and `ObjectConfigurationAction` before "executing" it
    Since:
      1.6

  - ### getPluginManager

    PluginManager getPluginManager()
    The plugin manager for this plugin aware object.
    Returns:
      the plugin manager
    Since:
      2.3