在单个build.gradle文件中多次调用相同的任务

时间:2017-02-19 07:23:46

标签: gradle plugins

我有一个自定义Gradle插件,它将从模板文件生成Java文件。我在不同的位置有几个这样的模板文件,我需要"编译"所有这些都可以生成我需要的Java文件。一旦我有文件,我想将它们打包成.jar。

我认为我可以这样做的一种方法是调用"编译模板"在同一个构建文件中多次执行任务。我在编译位置A中的模板文件的任务中再次调用它一次,再次从编译来自位置B等的模板文件的任务中调用它,直到我拥有我需要的所有Java文件。

这样的事情:

task compileFromLocationA <<{
    compileTemplate.execute(A)...
}

task compileFromLocationB
    compileTemplate.execute(B)...

...

packageJar(depends: compileFromLocationA, compileFromLocationB, ...)
    ...

但是,您无法以编程方式从另一个任务中调用任务。我想我可以将每个compileFromLocation_任务分解为它自己的build.gradle文件,但这似乎有些过分。什么是&#34;最佳实践&#34;在这样的情况下?

1 个答案:

答案 0 :(得分:0)

此代码似乎通过使用 build.gradletasks.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")
}