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

标签 gradle build.gradle

我正在使用 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/

相关文章:

android - 在产品中拆分apk

grails - 如何在groovy-script/gradle中使用ant.resourcelist

android - 如何导入具有gradle依赖关系的库

android - Android Studio 1.2.1.1 中的 Gradle 项目刷新失败

android - 无法解析符号 'GooglePlayServicesClient'

android-studio - 任务 ':tweetLanes:dexDebug' 执行失败

gradle - 震撼之前复制文件

android - 无法解析 : pub. devrel :easypermissions:0. 3.0

gradle - 如何在构建 gradle 文件中更改 android 应用程序名称

gradle - 如何根据子文件夹复制文件并重命名