# PluginAware

API Documentation: | `PluginAware`

Known Subtypes: |
`Project`
`Gradle`
`Settings`

Something that can have plugins applied to it.

The `PluginAware.getPluginManager()` can be used for applying and detecting whether plugins have been applied.

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

### Properties

Property | Description
`pluginManager` | Incubating The plugin manager for this plugin aware object.
`plugins` | The container of plugins that have been applied to this object.

### Methods

Method | Description
`apply(closure)` | Applies zero or more plugins or scripts.
`apply(options)` | Applies a plugin or script, using the given options provided as a map. Does nothing if the plugin has already been applied.
`apply(action)` | Applies zero or more plugins or scripts.

### Script blocks

No script blocks

### Property details

#### `PluginManager` `pluginManager` (read-only)

Note: This property is incubating and may change in a future version of Gradle.

The plugin manager for this plugin aware object.

#### `PluginContainer` `plugins` (read-only)

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 `PluginAware.getPluginManager()` than use the plugin container.

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

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

### Method details

#### `void` `apply`(`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 `PluginAware.apply()` in that it allows methods of the configuration action to be invoked more than once.

#### `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()`.
- `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.

#### `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 `PluginAware.apply()` in that it allows methods of the configuration action to be invoked more than once.