Применять плагин только для сценария kotlin в некоторых ситуациях, но затем не могу разрешить настройку плагина - PullRequest
1 голос
/ 24 марта 2020

Моя команда преобразует свои скрипты Gradle из Groovy в Kotlin, и существует некоторое поведение, которое мы пытаемся воспроизвести с помощью Kotlin gradle скриптов.

Иногда мы применяем и настраиваем только плагин при сборке на CI. Нет смысла применять плагин, который вы не используете.

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

Но тогда, когда мы строим локально, у нас возникает ошибка в нашем скрипте сборки, потому что наша конфигурация плагина не может быть решена:

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

1 Ответ

1 голос
/ 24 марта 2020

Плагины DSL строги в отношении того, что вы можете сделать. Это особенно верно для Kotlin, поскольку он статически типизирован и скомпилирован в фоновом режиме.

Я полагаю, вам нужно будет сделать что-то вроде:

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

Это должно обеспечить Firebase Связанные расширения / классы плагина находятся в пути к классу сценария сборки.

Затем где-нибудь позже в вашем сценарии сборки, фактически примените и настройте плагин:

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

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

Я не знаю фактического тип / класс firebaseAppDistribution, поэтому я использовал FirebaseAppDistributionExtension в качестве примера. Вам нужно будет узнать конкретный тип расширения и использовать его в качестве типа.

Список литературы:

...