Java 设计问题-用于发布包装的Gradle插件?

Java 设计问题-用于发布包装的Gradle插件?,java,gradle,design-patterns,architecture,gradle-plugin,Java,Gradle,Design Patterns,Architecture,Gradle Plugin,这里是gradle新手 我已经开始实现一个小的gradle插件。该插件的目标是为项目创建一个发布zip,目的是跨几个不同的项目使用 每个项目都有一个yaml文件,具有松散的压缩结构 --- zip: task: - name: zip: task: - name: - name: - name: zip表示此时应压缩给定的工作目录 task表示为准备压缩而准备特定目录时应执行的gradle任务的名称 我想

这里是gradle新手

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

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

---
zip:
task:
  - name:
    zip:
     task:
          - name:
          - name:
          - name:
  • zip表示此时应压缩给定的工作目录

  • task表示为准备压缩而准备特定目录时应执行的gradle任务的名称

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

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

我的实现已经进行了一半,我有点担心我滥用gradle的方式,这不是我的本意。我的一些主要担忧是

我有一个任务正在协调许多其他gradle任务,我可以动态查找或创建一个任务,然后检索它的操作并从我的manager任务中执行它们,这在gradle示例中并不常见。每个人似乎都有非常静态的线性任务依赖关系,并且不会“反射式”创建或查找要执行的任务

当处理来自yml的任务条目时,my manager任务尝试按名称查找gradle任务,如果它不存在,则尝试创建该任务。如果创建/找到一个任务,我将YmlTaskDTO的属性设置到该任务上,然后调用该任务执行。重复使用具有不同属性的相同任务会遇到问题吗?例如,如果我有类似的东西

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

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

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

您在这里所做的是按照用例的特定顺序组合现有任务。这是一个过分的插件

通过简单的任务和任务链接,您可以实现所需的功能