【问题标题】:Calling the same task multiple times in a single build.gradle file在单个 build.gradle 文件中多次调用同一任务
【发布时间】: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 文件,为什么不将具有多个源的文件作为一个任务动态构建,然后在依赖于构建文件的第一个任务的单独任务中调用插件?假设文件可以有多个来源?那将是一种不需要任何插件修改的选项。

标签: gradle plugins


【解决方案1】:

此代码似乎可以在 build.gradle 中使用 tasks.register() - 例如执行多个源代码生成步骤 - 在我的情况下,我需要在两个不同的步骤中加载不同的文件对(XML 模式和生成选项):

plugins {
    id 'java'
    id "com.plugin" version "1.0"
}


sourceSets.main.java.srcDirs += file("${buildDir}/genSrc")
sourceSets.test.java.srcDirs += file("${buildDir}/testGenSrc")

tasks.compileJava {
    dependsOn tasks.named("genMessage")
}

genMessage {
    codesFile = "${projectDir}/src/main/resources/file.xml"
}

def testGenModel1 = tasks.register("testGenModel1", com.plugin.TestGenModelTask.class) {
    schema = "${projectDir}/src/test/resources/file.xsd"
    options = "${projectDir}/src/test/resources/file.xml"
}

def testGenModel2 = tasks.register("testGenModel2", com.plugin.TestGenModelTask.class) {
    schema = "${projectDir}/src/test/resources/file2.xsd"
    options = "${projectDir}/src/test/resources/file2.xml"
}

tasks.compileTestJava {
    dependsOn tasks.named("testGenModel1"), tasks.named("testGenModel2")
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-27
    • 2014-12-13
    • 1970-01-01
    • 2018-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多