扩展感知

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

扩展的容器。