我有一个自定义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;在这样的情况下?
答案 0 :(得分:0)
此代码似乎通过使用 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")
}