根据Gradle docs,ExtensionAware
对象可以在运行时与其他对象一起扩展。
所以我们可以创建
// Add new extensions via the extension container
project.extensions.create('custom', String, "bar")
然后可以通过
访问project.custom == "bar"
然后,我们有了Extra properties extensions,可以将新属性添加到现有对象中。
project.ext.custom = "bar"
或者简单地
project.custom = "bar"
从可用性的角度看,两者似乎没有区别。
我知道ext
是一个特殊的扩展名,搜索属性的范围不同于其他扩展名,但是两者之间的实际区别是什么?简单的扩展和ext是否提供相同的功能?
答案 0 :(得分:0)
通常,扩展和额外属性具有相同的目的,因为它们都有助于扩展Gradle DSL中各种元素的范围,主要是{{ 1}}对象。 documentation on Project
通过以下解释介绍了功能:
- 项目的 extra 属性。每个项目维护一个额外属性的映射,其中可以包含任何任意名称->值对。定义后,该作用域的属性是可读可写。有关更多详细信息,请参见其他属性。
- 扩展已通过插件添加到项目 。每个扩展名都可以作为具有与扩展名相同名称的只读属性。
我着重介绍了上面文档摘录的某些部分,以显示这些功能之间的两个示例差异:
在定义后可以读取和写入额外属性的同时,定义后 extension 是只读的。如果扩展是一个复杂的对象,则可以编写其子属性,但不能编写扩展本身。
扩展主要用于插件开发人员,而额外属性应该在实际的构建脚本中使用。