自定义 PublishToIvyRepository 任务中存储库的语法是什么?

What is the syntax for a repository in a custom PublishToIvyRepository task?

我正在尝试创建一个自定义任务,以便我可以发布到通常不属于 build.gradle 中项目级 publishing {} 块的特定存储库。我最初的想法是创建一个 PublishToIvyRepository 类型的任务,它有一个用于自定义存储库的字段。我的代码如下所示:

task publishToSpecialIvyRepo(type: PublishToIvyRepository) {
    repository = ivy {
        url "http://example.com/mySpecialIvyRepo"
        layout 'pattern' , {
            artifact '[organization]/[module]/[revision]/[artifact](-[revision])(-[classifier]).[ext]'
            ivy '[organization]/[module]/[revision]/[artifact].[ext]'
        }
    }
    publication = project.publishing.publications[0]
}

但是,这似乎不起作用,因为我收到一条涉及无法识别 ivy {} 语法的错误消息。

Could not find method ivy() for arguments [build_6twdleybkcdvojdar8mcpb96g$_run_closure7$_closure23@60c8966b] on task ':MyProject:publishToSpecialIvyRepo' of type org.gradle.api.publish.ivy.tasks.PublishToIvyR epository.

不幸的是,documentation about publishing to Ivy repositories 没有描述编写您自己的 PublishToIvyRepository 任务,所以我不确定我做错了什么。

这是尝试发布到特定存储库的正确方法吗?如果是这样,那我做错了什么?有没有更好的方法来实现我的目标?

ivy 方法是 RepositoryHandler 的一部分,因此在 ProjectPublishToIvyRepository 任务范围内不可用。

您可以尝试通过默认方式创建存储库RepositoryHandler:

repository = repositories.ivy {
    // configure the repository
}

请注意,此方法会将存储库添加到用于工件解析的存储库列表中。