Gradle中扩展和额外属性之间的差异

Gradle中扩展和额外属性之间的差异,gradle,Gradle,根据,可以在运行时使用其他对象扩展ExtensionAware对象 所以我们可以创造 // Add new extensions via the extension container project.extensions.create('custom', String, "bar") 然后可以访问它作为 project.custom == "bar" 然后,我们有了一个允许将新属性添加到现有对象的方法 project.ext.custom = "bar" 或者干脆 project.cus

根据,可以在运行时使用其他对象扩展
ExtensionAware
对象

所以我们可以创造

// Add new extensions via the extension container
project.extensions.create('custom', String, "bar")
然后可以访问它作为

project.custom == "bar"
然后,我们有了一个允许将新属性添加到现有对象的方法

project.ext.custom = "bar"
或者干脆

project.custom = "bar"
从可用性的角度来看,两者似乎没有区别

我知道
ext
是一个特殊的扩展,搜索属性的范围与其他扩展不同,但两者之间的实际区别是什么?简单扩展和ext提供相同的功能吗?

一般来说,扩展和额外属性都有相同的用途,因为它们都有助于扩展Gradle DSL中各种元素的范围,主要是
项目
对象。介绍了这些功能,并进行了以下说明:

  • 项目的额外属性。每个项目都维护一个额外属性的映射,这些属性可以包含任意名称->值对。一旦定义,此作用域的属性将是可读写的。有关详细信息,请参见额外属性

  • 插件添加到项目中的扩展。每个扩展名都是只读的,与扩展名同名
我强调了上述文档摘录的一些部分,以显示功能之间的两个示例性差异:

  • 虽然定义后可以读取和写入额外的属性,但扩展一旦定义,它将是只读的。如果扩展是一个复杂对象,则可以写入其子属性,但不能写入扩展本身

  • 扩展主要针对插件开发人员,而额外的属性应该在实际构建脚本中使用


  • “每个扩展都可以作为只读属性使用”是我缺少的一点。我想知道为什么Gradle文档中没有提到这一点,而是API文档中提到了这一点。谢谢你的回答。