API文档: | 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"
许多 Gradle 对象都是扩展感知的。这包括;项目、任务、配置、依赖项等。
有关添加和创建扩展的更多信息,请参阅ExtensionContainer
。
有关额外属性的更多信息,请参阅ExtraPropertiesExtension
。
一个ExtensionAware
对象有多个 Gradle 搜索属性的“范围”。这些范围是:
- 物体本身。此范围包括实现类声明的任何属性 getter 和 setter。该作用域的属性是否可读或可写取决于相应的 getter 或 setter 方法是否存在。
- Groovy 元编程方法由对象的类实现,例如
propertyMissing()
.插件作者必须小心确保propertyMissing()
实现,如果找不到属性,则会引发 MissingPropertyException(String, Class) 异常。如果propertyMissing()
始终返回任何属性的值,Gradle 将不会搜索下面的其余范围。 - 对象的额外属性。每个对象都维护一个额外属性的映射,其中可以包含任意名称 -> 值对。一旦定义,该范围的属性就是可读可写的。
- 通过插件添加到对象的扩展。每个扩展都可以作为只读属性使用,其名称与扩展相同。
财产 | 描述 |
extensions | 扩展的容器。 |
ExtensionContainer
extensions
(只读)
扩展的容器。