Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gradle 如何使用参数调用另一个子项目生成文件中的任务_Gradle_Build.gradle - Fatal编程技术网

Gradle 如何使用参数调用另一个子项目生成文件中的任务

Gradle 如何使用参数调用另一个子项目生成文件中的任务,gradle,build.gradle,Gradle,Build.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 generateCo

我正在使用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')
}
不确定“需要执行另一个子项目中存在的任务”是什么意思。请举一个具体的例子。