使用 Gradle 的“仅工件表示法”和自定义工件名称

Posted

技术标签:

【中文标题】使用 Gradle 的“仅工件表示法”和自定义工件名称【英文标题】:Using Gradle's "Artifact only notation" with a custom artifact name 【发布时间】:2014-09-14 12:04:03 【问题描述】:

我想使用Artifact only notation 下载文件名与模块名完全不同的单个工件。我的 Ivy 神器模式配置为:

ivy 
    artifactPattern 'http://host/[organization]/[module]/[revision]/[artifact]-[revision].[ext]'

然而,“Artifact only notation”似乎只支持:

group(映射到[organization]), name(映射到[module]), version(映射到[revision]), ext(映射到[exp])和 classifier(映射到[classifier],此处未使用)。

网址的[artifact] 部分似乎总是被name 替换。

有没有办法在 Gradle 中明确设置 URL 中的 [artifact] 被替换为什么?在普通的 Ivy XML 中,我可以通过在 dependency 标记内指定带有 name 属性集的 artifact tag 来实现这一点。

我的问题与this question 有点相关,除了我没有服务器端ivy.xml 文件,我不能使用这个技巧来滥用classifier,因为我的工件名称不仅仅是后缀不同模块名称。

【问题讨论】:

【参考方案1】:

事实证明,指定对名称与其模块名称不同的工件的依赖关系的正确语法是 this example 的一部分。为了将上述 URL 中的 [artifact] 替换为 [module] 以外的其他内容,请按如下方式声明依赖项:

compile ('group-or-org-name:module-name:module-version') 
    artifact 
        name = 'artifact-name-different-from-module-name'
        type = 'type-must-not-be-null'
    

编辑:以下是该功能的官方文档,作为 Advanced dependency configuration 部分的一部分。

【讨论】:

以上是关于使用 Gradle 的“仅工件表示法”和自定义工件名称的主要内容,如果未能解决你的问题,请参考以下文章

Android Gradle 插件将自定义 Gradle 插件上传到自建 Maven 仓库 ③ ( 配置上传工件 | 将 Gradle 插件 jar 包源码文档上传到本地Maven 仓库 )

发布工件覆盖 Gradle 中的其他工件

没有使用 jenkins gradle artifactory 插件部署的工件

重新发布 gradle 工件

如何使用 gradle API 检查工件是不是存在?

使用 Gradle 打包来自 Artifactory 的多个工件