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

2023-12-31

我有一个自定义 Gradle 插件,它将从模板文件生成 Java 文件。我在不同位置有几个这样的模板文件,我需要“编译”所有这些文件以生成我需要的 Java 文件。获得文件后,我想将它们打包到 .jar 中。

我认为可以做到这一点的一种方法是从同一构建文件中多次调用“编译模板”任务。我会在编译位置 A 中的模板文件的任务中调用它一次,然后在编译位置 B 中的模板文件的任务中再次调用它......等等,直到获得所需的所有 Java 文件。

像这样的东西:

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

task compileFromLocationB
    compileTemplate.execute(B)...

...

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

但是,您无法以编程方式从另一个任务中调用一个任务。我想我可以打破每一个compileFromLocation_任务变成它自己的任务build.gradle文件,但这似乎有点矫枉过正。在这种情况下,“最佳实践”是什么?


这段代码似乎适用于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")
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐