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

Posted

技术标签:

【中文标题】如何使用 gradle API 检查工件是不是存在?【英文标题】:How to check the existence of an artifact with the gradle API?如何使用 gradle API 检查工件是否存在? 【发布时间】:2015-10-13 12:02:08 【问题描述】:

我正在使用 Gradle 2.4 来部署用 Grovvy 和 Java 开发的工件。我想在发布之前检查工件的实际存在。一种应用是避免覆盖生产中发布的工件。另一个应用程序是发现下一个次要版本,用于发布集成测试版本。

我将发布到 IVY 存储库,我的组件以组、名称、版本为特征。我想知道如何使用 Gradle API 来检查是否已经使用这些输入发布了工件。

谢谢, 洛伊克。

【问题讨论】:

“部署工件”就像在 jcenter 中一样?如果要发布到 jcenter,则不能两次发布同一个版本。 我们部署在本地的 ivy 存储库中。因此,没有这样的访问控制,AFAIK。 Ivy 有一个 buildnumber 任务,可用于根据已发布的内容增加 build 编号。见:***.com/questions/8452710/… 【参考方案1】:

我不认为有专门用于此的特定 API,尽管它可能会在将来的某个时候添加到发布机制中。预期您通常会使用存储库配置来指定您不想允许覆盖。

至于确定下一个次要版本,您应该快速查看可用的 Gradle 发布插件,看看它们是否符合您的要求。我只是在网上搜索了“gradle release plugin”。 Axion one 似乎是最新的。

您可以在构建文件as demonstrated on the Gradle forums 中对工件检查进行编码。有效但 hacky 的解决方案是添加如下内容:

uploadArchives 
  onlyIf 
    try 
      new URL("http://myrepo.com/$calculatedPathToWhereItWouldBePublished").bytes
      false
     catch (FileNotFoundException e) 
      true
    
  

一种更简洁的方法是将您的特定要求分解到您自己的插件中。

【讨论】:

Axion 插件似乎是特定于 GIT 的,我们使用的是 SVN。所以,它似乎不符合我们的需求。 为了交付我们的模块,我们不会上传到服务器,而是将它们安装到本地 IVY 存储库中,因此我们使用 ivy-publish 插件提供的“发布”任务。因此,我正在寻找与“发布”任务等效的解决方案。

以上是关于如何使用 gradle API 检查工件是不是存在?的主要内容,如果未能解决你的问题,请参考以下文章

将工件从 gradle 项目发布到 bintray(maven 存储库)

重新发布 gradle 工件

如何在SBT中发布之前检查工件是否存在

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

Gradle:如何发布自定义文件工件?

如何检查 Api 响应是不是存在