Почему функция «публикации» не найдена в моем пользовательском файле 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 моего основного проекта.


person Shan    schedule 12.02.2019    source источник


Ответы (1)


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

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

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

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

import org.gradle.api.publish.PublishingExtension

plugins {
    `maven-publish`
    signing
}

configure<PublishingExtension> { 
    // ...
}

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

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

person hotkey    schedule 12.02.2019
comment
Работает отлично! Благодарю вас! :-) И спасибо за ссылки на документацию (они мне очень нужны) - person Shan; 12.02.2019