为什么在 buildSrc 目录下的自定义 gradle.kts 文件中找不到 'publishing' 函数?

Why is 'publishing' function not being found in my custom gradle.kts file within buildSrc directory?

我有一个正在构建的自定义 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 文件中执行 运行 任务和诸如此类的东西,但是尝试使用 gradle 文档中的 publishing 功能被证明是不可能的。有任何想法吗?我正在使用 gradle 版本 4.10.3(我需要 Android 支持)。 maven-deploy.gradle.kts 文件在 buildSrc/src/main/kotlin 中,并且由 id("maven-deploy") 添加到我的主项目的 build.gradle.kts 文件中。

发生这种情况是因为 Gradle 仅将为 Gradle Kotlin DSL 生成的类型安全访问器导入到主构建脚本中,而不是导入到 脚本插件中 :

Only the main project build scripts have type-safe model accessors. Initialization scripts, settings scripts, script plugins (precompiled or otherwise) do not. These limitations will be removed in a future Gradle release.

Understanding when type-safe model accessors are available

在您提到的脚本中,您可以动态访问发布扩展,例如,使用 configure<PublishingExtension> { ... }:

import org.gradle.api.publish.PublishingExtension

plugins {
    `maven-publish`
    signing
}

configure<PublishingExtension> { 
    // ...
}

此处描述:Project extensions and conventions

更新:Gradle 5.3 RC1 似乎增加了在脚本插件中使用生成的扩展的可能性。