public interface ExtensionAware
// 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
.
An ExtensionAware
object has several 'scopes' that Gradle searches for properties. These scopes are:
propertyMissing()
. Care must be taken by plugin authors to
ensure propertyMissing()
is implemented such that if a property is not found a MissingPropertyException(String, Class) exception is thrown.
If propertyMissing()
always returns a value for any property, Gradle will not search the rest of the scopes below.Modifier and Type | Method and Description |
---|---|
ExtensionContainer |
getExtensions()
The container of extensions.
|
ExtensionContainer getExtensions()