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

У меня есть собственный скрипт 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 Ответ

0 голосов
/ 12 февраля 2019

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

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

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

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

import org.gradle.api.publish.PublishingExtension

plugins {
    `maven-publish`
    signing
}

configure<PublishingExtension> { 
    // ...
}

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

UPD: Gradle 5.3 RC1 кажетсядобавить возможность использовать сгенерированные расширения в плагинах скриптов.

...