我有两个任务都调用Exec闭包(task1和task2)。 task1 exec调用为task2生成输出文件,以作为输入的命令行参数。 task1和task2将是多项目构建中使用的同一gradle文件的一部分。我使用" apply from:"在多个项目中包含相同的gradle文件。我使用外部专业人员工作代码来传递这些文件,但我已经破坏了这一点,我觉得必须有更好的方法来管理这个。我想有一种更好的方法可以使用依赖项和工件,但是我很难在Java构建之外使用它们。这样做的目的是在这种类型的多个项目中重用它,并让它适当地管理它们之间的文件依赖性。我可以在项目中有n个项目输出task1,这些项目可能需要作为另一个项目中task2的输入。包括参考代码,但我觉得我所拥有的是根本上有缺陷和错综复杂的。
ext.task1generatedFile = file()
ext.task2InputsFromTask1 = files() //This is set up in individual subprojects.
subprojects{
afterEvaluate { Project project ->
ext.task1generatedFile = file("$project.buildDir/$project.name" + ".projlib")
task task1 {
doLast{
println "Building task1 output for $project.name"
//task1generatedFile is created by myApp.exe
exec {
workingDir "$appHome/bin"
commandLine "${appHome}/bin/myApp.exe",
'-n', task1generatedFile.toString()
}
}
}
task1.outputs.files task1generatedFile
task task2 {
doLast {
println "Building Project task2 for $project.name from task1 output file(s) across multiple projects"
//Handle optional parameters that are output from any number of task1 outputs from other projects. This list can be empty depending on the project.
String projLibCommas = "";
ArrayList<String> optionalArgs = new ArrayList<String>();
//Need to constructed comma separated list for task1 outputs generated in other projects
if (!task2InputsFromTask1.isEmpty()) {
optionalArgs.add("-pl");
projLibCommas = "\"" + task2InputsFromTask1[0];
for (int i =1; i < task2InputsFromTask1.getFiles().size(); i++ ) {
projLibCommas += "," + task2InputsFromTask1[i];
}
projLibCommas += "\"";
optionalArgs.add(projLibCommas);
}
exec {
workingDir "$appHome/bin"
commandLine "myApp2.exe",
args optionalArgs
}
}
}
task2.inputs.files task1generatedFile
}
}
//在一些需要从其他项目生成文件的子项目中,我这样做。
task2.dependsOn ':ParentProj:AnotherProject:task1'
task2 {
Project anotherProject = project(':ParentProj:AnotherProject')
ext.task2InputsFromTask1 = files(anotherProject.task1generatedFile);
}