如何使用参数调用另一个子项目构建文件中的任务

ami*_*ite 5 gradle build.gradle

我正在使用Gradle创建多项目构建文件。许多子项目需要通过传入某些参数来执行另一个子项目中存在的任务。在Gradle中如何实现?

例如 :

root project
   - project B : task X
   - project A : task Y (param m, param n)
Run Code Online (Sandbox Code Playgroud)

我需要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
}
Run Code Online (Sandbox Code Playgroud)

现在,有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
     ....
Run Code Online (Sandbox Code Playgroud)

Pet*_*ser 3

一个任务不能调用另一个任务。相反,解决这个问题的方法是为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)
}
Run Code Online (Sandbox Code Playgroud)

如果没有关于属性文件所在位置的通用模式,则可以在子项目的构建脚本中添加此信息:

generateCode {
    args file('relative/path/to/properties/file')
}
Run Code Online (Sandbox Code Playgroud)