在`settings.gradle`中`plugins {}`和`pluginManagement.plugins {}`有什么区别

czfnxgou  于 2023-10-19  发布在  其他
关注(0)|答案(1)|浏览(98)

基本上是标题。
我找不到一个简单的比较,解释这两者之间的差异:

pluginManagement {
    repositories {
        gradlePluginPortal()
        google()
    }

    plugins {
        id "com.some.awesomeplugin" version "1.2.3"
        id "dev.flutter.flutter-gradle-plugin" version "1.0.0" apply false
    }
}

// And these:
plugins {
    id "com.another.greatplugin" version "2.1.37"
    id "com.android.application" version "7.3.0" apply false
}

我知道Gradle中可以有3种类型的插件:
1.项目插件,在评估单个build.gradle文件时调用其apply()回调:

class BuildPhasePlugin : Plugin<Project>

1.设置插件,当settings.gradle文件被评估时,其apply()回调被调用:

class SettingsPhasePlugin : Plugins<Settings>

1.插件,其apply()在初始化脚本(init.gradle)被评估时被调用:

class InitPhasePlugin : Plugin<Gradle>

我想这3种类型的插件在某种程度上与它们可以应用于settings.gradle中的plugins {}块有关?

velaa5lx

velaa5lx1#

pluginManagement { plugins { ... } }没有应用任何插件,也没有将它们添加到任何类路径,因此apply false是一个no-op,并且应该imho实际触发语法错误。
这个块只是集中定义插件的版本,当它们在其他地方使用时没有版本。现在我不会再使用这个块了,而是使用版本目录来集中定义版本,包括插件版本。
顶层的plugins { ... }块实际上应用了指定的设置插件(或者在与apply false一起使用时将它们添加到类路径中)。

相关问题