仅在某些情况下为 kotlin script gradle 应用插件,但无法解析插件配置

Only apply plugin for kotlin script gradle in some situations, but then can't resolve plugin configuration

我的团队正在将他们的 Gradle 脚本从 Groovy 转换为 Kotlin,并且我们正在努力使用 Kotlin 脚本复制一些行为 gradle。

有时我们只在 CI 上构建时应用和配置插件。应用一个你不使用的插件是没有意义的。

plugins {
  if (Build.isCi) {
    id("com.google.firebase.appdistribution")
  }
}

但是,当我们在本地构建时,我们的构建脚本出现错误,因为我们的插件配置无法解析:

if (Build.isCi) {
  firebaseAppDistribution { // <-- Can't resolve `firebaseAppDistribution`
  }
}

plugins DSL 对您可以做什么很严格。对于 Kotlin 来说尤其如此,因为它是在后台静态类型化和编译的。

我相信您需要执行以下操作:

plugins {
    id("com.google.firebase.appdistribution") apply false
}

这应确保 Firebase 插件的相关 extensions/classes 在构建脚本类路径中。

然后在构建脚本中的某个地方实际应用和配置插件:

plugins {
    id("com.google.firebase.appdistribution") apply false
}

if (Build.isCi) {
    apply(plugin = "com.google.firebase.appdistribution")
    configure<FirebaseAppDistributionExtension> {
        // ...
    }
}

我不知道 firebaseAppDistribution 的实际 type/class,所以我以 FirebaseAppDistributionExtension 为例。您将需要找出扩展的具体类型并将其用作类型。

参考文献: