为什么在buildSrc目录中的自定义gradle.kts文件中找不到“发布”功能?

Sha*_*han 4 gradle maven-plugin maven-publish gradle-kotlin-dsl

我正在构建一个自定义的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
}
Run Code Online (Sandbox Code Playgroud)

我可以在maven-deploy.gradle.kts文件中正常运行任务,但不能尝试使用publishinggradle文档中的函数。有任何想法吗?我正在使用gradle版本4.10.3(我需要Android支持)。该maven-deploy.gradle.kts文件位于我的主项目的文件中buildSrc/src/main/kotlin,并正在其中添加。id("maven-deploy")build.gradle.kts

hot*_*key 8

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

仅主项目构建脚本具有类型安全的模型访问器。初始化脚本,设置脚本,脚本插件(预编译或其他方式)没有。这些限制将在将来的Gradle版本中删除。

请参阅了解何时可以使用类型安全的模型访问器

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

import org.gradle.api.publish.PublishingExtension

plugins {
    `maven-publish`
    signing
}

configure<PublishingExtension> { 
    // ...
}
Run Code Online (Sandbox Code Playgroud)

此处描述:项目扩展名和约定

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