【发布时间】:2017-02-19 07:23:45
【问题描述】:
我有一个自定义 Gradle 插件,可以从模板文件生成 Java 文件。我在不同的位置有几个这样的模板文件,我需要“编译”所有这些文件以生成我需要的 Java 文件。获得文件后,我想将它们打包成 .jar。
我认为可以做到这一点的一种方法是在同一个构建文件中多次调用“编译模板”任务。我会在编译位置 A 中的模板文件的任务中调用它一次,再次从编译位置 B 中的模板文件的任务中调用它......等等,直到我拥有我需要的所有 Java 文件。
类似这样的:
task compileFromLocationA <<{
compileTemplate.execute(A)...
}
task compileFromLocationB
compileTemplate.execute(B)...
...
packageJar(depends: compileFromLocationA, compileFromLocationB, ...)
...
但是,您不能以编程方式从另一个任务中调用任务。我想我可以将每个compileFromLocation_ 任务分解成它自己的build.gradle 文件,但这似乎有点矫枉过正。在这种情况下,“最佳做法”是什么?
【问题讨论】:
-
为了更好地理解:您的模板文件是否位于已知位置的多个位置?另外,自定义插件是您自己创建的吗?意味着您可以控制插件的源代码?
-
是的,是的。我需要从 6 或 7 个地方获取模板文件,但我都知道。至于插件,不是我写的,但是我可以访问源代码。
-
如果是插件,是否提供自定义任务类型?它是否还定义了诸如“源”之类的属性,它将在其中查找要从中生成模板的文件?
-
它提供了一个自定义任务,
compileTemplateFile。它没有定义像'source'这样的属性,它只是查看build.umple文件的位置。不过,我也许可以将其配置为包含source属性。 -
如果它只查看 bulid.umple 文件,为什么不将具有多个源的文件作为一个任务动态构建,然后在依赖于构建文件的第一个任务的单独任务中调用插件?假设文件可以有多个来源?那将是一种不需要任何插件修改的选项。