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

问题描述 投票:3回答:1

我有一个自定义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 maven-plugin gradle-kotlin-dsl maven-publish
1个回答
4
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.