java - 设计问题 - 用于发布打包的 Gradle 插件?
问题描述
gradle新手在这里,
我已经开始实现一个小的 gradle 插件。该插件的目标是为项目创建一个发布 zip,目的是在几个不同的项目中使用。
每个项目都有一个带有松散压缩结构的 yaml 文件;
---
zip:
task:
- name:
zip:
task:
- name:
- name:
- name:
zip 表示此时应压缩给定的工作目录
task 表示应执行的 gradle 任务的名称,准备特定目录以准备压缩
想到的最好的专业人士是,通过这种方法,我可以在项目之间重用 gradle 任务,如果需要,可以在每个项目级别包含自定义 gradle 任务,并在 yml 中引用它们。使用 yaml 还有助于创建发布 zip,使其易于构建和阅读。
我有一个在运行时从 cli ./gradlew myReleaseZipTask 调用的管理器 gradle 任务(我认为我通过将其设为 exec 任务并将逻辑放入 exec 操作来实现此目的)。此管理器任务负责将 yaml 文件解析为 DTO。从最低的任务遍历我遍历执行每个 gradle 任务的图,按照定义将文件准备到指定的目录,然后在所有任务完成后压缩当前工作区。继续上图
我的实施进行到一半,我有点担心我以一种非预期的方式滥用 gradle。我的一些主要担忧是;
我有一个任务正在编排许多其他 gradle 任务,我要么即时查找或创建任务,然后检索其操作并从我的管理器任务中执行它们,这不是我在 gradle 示例中经常看到的内容。每个人似乎都有非常静态的线性任务依赖关系,并且不会“反射性地”创建或查找要执行的任务。
在处理来自 yml 的任务条目时,我的管理器任务尝试按名称查找 gradle 任务,如果它不存在,它会尝试创建任务。给定创建/找到任务,我将 YmlTaskDTO 中的属性设置到任务上,然后调用任务执行。我是否会遇到重用具有不同属性的相同任务的问题?例如,如果我有类似的东西;
zip:
task:
- name: taskA
argA: A
argB: B
- name: taskA
argA: A
argB: C
谁能给我一些关于我的设计的反馈,以及它是否符合正确的 gradle 使用标准?请提出您可能有的任何疑虑!
解决方案
我想你自己已经意识到了一些答案。
这里的一个指导是“插件”是创建一个新功能,这在本机 gradle 中不可用。
您在这里所做的是以特定顺序为您的用例组合现有任务。插件是一个矫枉过正。
您正在寻找的东西可以通过简单的任务和任务链来实现。
推荐阅读
- google-cloud-platform - 删除克隆新服务器的快照是否会导致服务器崩溃?
- java - 如何使用 java WebDriver 在 Firefox 中打开“about:preferences”
- swift - 如何在 CognitoAuth - Swift 中制作 globalSignOut?
- microsoft-graph-api - 同步特定邮件文件夹中的消息时持续出现“503 UnknownError”(通过增量)
- ajax - razor 代码中的 Ajax 调用刷新页面
- r - 是否有用于删除部分行名的 R 函数?
- firebase-authentication - 从 Identity Platform SAML ACS 重定向(将 Okta 与 Google Identity Platform 集成)
- javascript - 如何使用分页最佳实践 reactjs 搜索过滤器?
- f# - F# 如何编写一个接受 int 列表或字符串列表的函数
- php - Wordpress Post Carousel - 如何自动填充?