【问题标题】:Gradle: "apply plugin" at the top or at the bottomGradle:顶部或底部的“应用插件”
【发布时间】:2017-01-31 03:49:03
【问题描述】:

在Android Studio项目的build.gradle文件开头或结尾添加“apply plugin”有同样的效果吗?

例如添加'com.google.gms.google-services'插件,Firebase官方文档建议在末尾添加,但我看到其他代码在开头添加。

我知道这个问题似乎无关紧要,但我正在为 Android Studio 开发一个插件来管理依赖项并且有这个疑问。

提前致谢

【问题讨论】:

标签: android gradle plugins apply


【解决方案1】:

Gradle 脚本从上到下解释,因此顺序很重要。请记住,gradle 有一个配置阶段和一个执行阶段,所以有时顺序并不重要。在脚本顶部应用插件很常见,因为插件通常会将 extension objects 和任务添加到 gradle 模型中,然后可以在构建脚本的下方进行配置。

例如,您不能执行以下操作,因为test 任务是由java 插件添加的:

test {
   include 'org/foo/**'
}
apply plugin: 'java'

【讨论】:

  • 这解释了为什么必须在顶部/附近添加一些插件。但并没有真正解释为什么 firebase 建议在底部添加 google-services。
  • 如果一个插件要使用tasks.withType(...) 或类似的,那么这可能需要在底部应用(否则它不会返回任何内容)。为避免这种情况,插件应在 project.afterEvaluate { ... } 块内执行这些类型的操作。也许插件不这样做,所以顺序很重要?
  • Firebase 团队的 Doug Stevenson 在回答中解释了为什么 google-services 插件必须放在底部:stackoverflow.com/questions/37994514/…
  • 我对该问题添加了评论,如果他们更改了实现以将事件监听器添加到配置中,那么他们可以在配置解决之前拦截配置。如果他们这样做了,那么您可以在 Gradle 脚本的顶部声明插件
猜你喜欢
  • 2023-04-08
  • 2018-12-27
  • 2017-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-27
相关资源
最近更新 更多