如何使用 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 检查工件是不是存在?的主要内容,如果未能解决你的问题,请参考以下文章