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()