首页 > 解决方案 > 设计问题 - 用于发布打包的 Gradle 插件?

问题描述

gradle新手在这里,

我已经开始实现一个小的 gradle 插件。该插件的目标是为项目创建一个发布 zip,目的是在几个不同的项目中使用。

每个项目都有一个带有松散压缩结构的 yaml 文件;

---
zip:
task:
  - name:
    zip:
     task:
          - name:
          - name:
          - name:

想到的最好的专业人士是,通过这种方法,我可以在项目之间重用 gradle 任务,如果需要,可以在每个项目级别包含自定义 gradle 任务,并在 yml 中引用它们。使用 yaml 还有助于创建发布 zip,使其易于构建和阅读。

我有一个在运行时从 cli ./gradlew myReleaseZipTask 调用的管理器 gradle 任务(我认为我通过将其设为 exec 任务并将逻辑放入 exec 操作来实现此目的)。此管理器任务负责将 yaml 文件解析为 DTO。从最低的任务遍历我遍历执行每个 gradle 任务的图,按照定义将文件准备到指定的目录,然后在所有任务完成后压缩当前工作区。继续上图

我的实施进行到一半,我有点担心我以一种非预期的方式滥用 gradle。我的一些主要担忧是;

我有一个任务正在编排许多其他 gradle 任务,我要么即时查找或创建任务,然后检索其操作并从我的管理器任务中执行它们,这不是我在 gradle 示例中经常看到的内容。每个人似乎都有非常静态的线性任务依赖关系,并且不会“反射性地”创建或查找要执行的任务。

在处理来自 yml 的任务条目时,我的管理器任务尝试按名称查找 gradle 任务,如果它不存在,它会尝试创建任务。给定创建/找到任务,我将 YmlTask​​DTO 中的属性设置到任务上,然后调用任务执行。我是否会遇到重用具有不同属性的相同任务的问题?例如,如果我有类似的东西;

zip:
     task:
          - name: taskA
            argA: A
            argB: B
          - name: taskA
            argA: A
            argB: C

谁能给我一些关于我的设计的反馈,以及它是否符合正确的 gradle 使用标准?请提出您可能有的任何疑虑!

标签: javagradledesign-patternsarchitecturegradle-plugin

解决方案


我想你自己已经意识到了一些答案。
这里的一个指导是“插件”是创建一个新功能,这在本机 gradle 中不可用。

您在这里所做的是以特定顺序为您的用例组合现有任务。插件是一个矫枉过正。

您正在寻找的东西可以通过简单的任务和任务链来实现。


推荐阅读