API Documentation: | ExtensionAware |
---|
Objects that can be extended at runtime with other objects.
// Extensions are just plain objects, there is no interface/type class MyExtension { String foo MyExtension(String foo) { this.foo = foo } } // Add new extensions via the extension container project.extensions.create('custom', MyExtension, "bar") // («name», «type», «constructor args», …) // extensions appear as properties on the target object by the given name assert project.custom instanceof MyExtension assert project.custom.foo == "bar" // also via a namespace method project.custom { assert foo == "bar" foo = "other" } assert project.custom.foo == "other" // Extensions added with the extension container's create method are themselves extensible assert project.custom instanceof ExtensionAware project.custom.extensions.create("nested", MyExtension, "baz") assert project.custom.nested.foo == "baz" // All extension aware objects have a special “ext” extension of type ExtraPropertiesExtension assert project.hasProperty("myProperty") == false project.ext.myProperty = "myValue" // Properties added to the “ext” extension are promoted to the owning object assert project.myProperty == "myValue"
Many Gradle objects are extension aware. This includes; projects, tasks, configurations, dependencies etc.
For more on adding & creating extensions, see ExtensionContainer
.
For more on extra properties, see ExtraPropertiesExtension
.
Property | Description |
extensions | The container of extensions. |
ExtensionContainer
extensions
(read-only)
The container of extensions.