Gradle中扩展和额外属性之间的区别

时间:2019-05-24 14:29:51

标签: gradle

根据Gradle docsExtensionAware对象可以在运行时与其他对象一起扩展。

所以我们可以创建

// 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是否提供相同的功能?

1 个答案:

答案 0 :(得分:0)

通常,扩展额外属性具有相同的目的,因为它们都有助于扩展Gradle DSL中各种元素的范围,主要是{{ 1}}对象。 documentation on Project通过以下解释介绍了功能:

  
      
  • 项目的 extra 属性。每个项目维护一个额外属性的映射,其中可以包含任何任意名称->值对。定义后,该作用域的属性是可读可写。有关更多详细信息,请参见其他属性。
  •   
  • 扩展已通过插件添加到项目 。每个扩展名都可以作为具有与扩展名相同名称的只读属性。
  •   

我着重介绍了上面文档摘录的某些部分,以显示这些功能之间的两个示例差异:

  1. 在定义后可以读取和写入额外属性的同时,定义后 extension 是只读的。如果扩展是一个复杂的对象,则可以编写其子属性,但不能编写扩展本身。

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