Почему в моем пользовательском файле gradle.kts в каталоге buildSrc не найдена функция публикации?

У меня есть собственный скрипт gradle.kts, который я создаю, который будет выполнять нашу maven публикацию для всех наших различных модулей в наш репозиторий sonatype, но встречает странную ошибку. Вот содержимое моего maven-deploy.gradle.kts файл:

plugins {
    `maven-publish`
    signing
}

publishing {
  //expression 'publishing' cannot be invoked as a function.
  //The function invoke() is not found
}

Я могу запускать задачи и еще много чего maven-deploy.gradle.kts файл в порядке, но пытается использовать publishing Функция из документации gradle оказывается невозможной. Есть идеи? Я использую Gradle версии 4.10.3 (мне нужна поддержка Android). maven-deploy.gradle.kts файл находится в buildSrc/src/main/kotlin и добавляется id("maven-deploy") в моем основном проекте build.gradle.kts файл.

1 ответ

Решение

Это происходит потому, что Gradle только импортирует созданные сгенерированные безопасные методы доступа для Gradle Kotlin DSL в основной скрипт сборки, но не в плагины скрипта:

Только основные сценарии сборки проекта имеют типобезопасные средства доступа к моделям. Скрипты инициализации, скрипты настроек, плагины скриптов (скомпилированные или иные) не делают. Эти ограничения будут сняты в будущем выпуске Gradle.

См. Понимание, когда доступны типовые безопасные средства доступа

В упомянутом вами скрипте вы можете получить динамический доступ к расширению публикации, например, используя configure<PublishingExtension> { ... }:

import org.gradle.api.publish.PublishingExtension

plugins {
    `maven-publish`
    signing
}

configure<PublishingExtension> { 
    // ...
}

Это описано здесь: Расширения и соглашения проекта

Другие вопросы по тегам