Plugins Gradle插件:约定与扩展

Plugins Gradle插件:约定与扩展,plugins,gradle,Plugins,Gradle,我正在编写一个Gradle插件,通过阅读用户指南和Gradle项目中插件的源代码来学习Gradle 在源代码中,我找到了两种向项目添加属性的方法: 约定(由JavaBasePlugin设置并由JavaPlugin使用) 扩展(由AnnoncePlugin设置并由BuildAnnouncementsPlugin使用) 我不明白它们之间的区别以及在什么情况下使用哪一个。有人能解释一下吗 PS:有人能在SO plugin中添加标签“gradle plugin”吗?我在以下网站上找到了答案: 扩展和

我正在编写一个Gradle插件,通过阅读用户指南和Gradle项目中插件的源代码来学习Gradle

在源代码中,我找到了两种向项目添加属性的方法:

  • 约定(由JavaBasePlugin设置并由JavaPlugin使用)
  • 扩展(由AnnoncePlugin设置并由BuildAnnouncementsPlugin使用)
我不明白它们之间的区别以及在什么情况下使用哪一个。有人能解释一下吗

PS:有人能在SO plugin中添加标签“gradle plugin”吗?

我在以下网站上找到了答案:

扩展和约定是动态扩展构建模型的类似(但不完全相同)方法。扩展是较新的概念,在很大程度上已经取代了约定。简而言之,只使用扩展,不使用约定

[……]

扩展是以用户定义的名称附加到构建模型的任意(通常是用户定义的)类的实例。扩展类可以定义任意方法。假设它附加到项目对象,扩展允许您添加Project.foo.someMethod,但不允许添加Project.someMethod。由于每个扩展都有自己的名称空间(本例中为foo),因此名称冲突的可能性大大降低(与约定相比)