11

我有一个正在构建的自定义 gradle.kts 脚本,它将为我们所有的各种模块发布到我们的 sonatype 存储库的 Maven 发布,但遇到一个奇怪的错误。这是我的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,但是尝试使用publishinggradle 文档中的函数被证明是不可能的。有任何想法吗?我正在使用 gradle 版本 4.10.3(我需要 Android 支持)。该maven-deploy.gradle.kts文件在我的主项目文件中buildSrc/src/main/kotlin并且正在被添加。id("maven-deploy")build.gradle.kts

4

1 回答 1

23

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

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

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

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

import org.gradle.api.publish.PublishingExtension

plugins {
    `maven-publish`
    signing
}

configure<PublishingExtension> { 
    // ...
}

此处对此进行了描述:项目扩展和约定

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

于 2019-02-12T18:01:29.020 回答