我正在使用 Gradle 创建多项目构建文件。许多子项目需要通过传入某些参数来执行另一个子项目中存在的任务。这如何在 Gradle 中实现?
例如 :
root project
- project B : task X
- project A : task Y (param m, param n)
我需要 projectB.taskX 来调用 projectA.taskY(m,n)
更新:
子项目 A 有一个 JavaExec 类型的任务,它需要一个属性文件位置的输入参数
task generateCode(dependsOn:['classes','build'], type: JavaExec) {
main = 'jjrom.ObjectGen'
classpath = sourceSets.main.runtimeClasspath
args 'arg1', 'arg2', file(propertiesFilePath).path
}
现在,有 10 个子项目,所有子项目都需要使用包含属性文件位置的参数调用此任务“generateCode”。此外,这个任务应该在构建每个可以使用dependsOn 实现的子项目之前执行。
我的java项目代码组织:
trunk/
projA/src/java/../ObjectGen.java
projB/src/java/../properties.xml
projC/src/java/../properties.xml
projD/src/java/../properties.xml
....
最佳答案
一个任务不能调用另一个任务。相反,解决这个问题的方法是添加一个 generateCode
十个子项目的任务。您可以使用类似于以下的代码从根构建脚本执行此操作:
subprojects {
apply plugin: 'java'
configurations {
codegen
}
dependencies {
// A contains the code for the code generator
codegen project(':A')
}
task generateCode(type: JavaExec) {
main = 'jjrom.ObjectGen'
classpath = configurations.codegen
args 'arg1', 'arg2'
}
compileJava.dependsOn(generateCode)
}
如果没有关于属性文件所在位置的一般模式,则可以在子项目的构建脚本中添加此信息:
generateCode {
args file('relative/path/to/properties/file')
}
关于gradle - 如何使用参数调用另一个子项目构建文件中的任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19549260/