如何让任务一个接一个地执行?

2022-09-01 12:39:36

基本上,我有4个任务需要按顺序运行,但我不能让它们这样做,我必须在命令行上逐个运行它,如下所示:

gradle :drmdexsecondary:compileReleaseJava --info --debug --stacktrace
gradle :drmdexsecondary:dexClasses --info --debug --stacktrace
gradle :drmdexsecondary:jar --info --debug --stacktrace

这是我的:build.gradle

evaluationDependsOnChildren();

    task dexClasses( type:Exec ) {
    
    //    compileJava.execute()
    
        String cmdExt = Os.isFamily(Os.FAMILY_WINDOWS) ? '.bat' : ''
    
        println("${buildDir}")
        println("${androidSdkDir}\\build-tools\\${buildToolsVersion}\\dx${cmdExt} --dex --output=${buildDir}\\classes\\classes.dex ${buildDir}\\classes\\release")
    
        commandLine "cmd", "/c", "${androidSdkDir}\\build-tools\\${buildToolsVersion}\\dx${cmdExt} --dex --output=${buildDir}\\classes\\classes.dex ${buildDir}\\classes\\release"
    }
    
    task jar(type: Jar) {
        from ("${buildDir}\\classes\\classes.dex")
    }

我的问题是这样的:

  1. 关键字不起作用...它只是被忽略而没有任何日志消息dependsOn
  2. taskname.execute()函数不起作用...它只是被忽略而没有任何日志消息
  3. compileReleaseJava在 build.gradle 中无法识别,并出现以下特定错误:Could not find property 'compileJava' on task ':drmdexsecondary:dexClasses'.

任何人都可以帮忙吗?

我已经从文档中咨询并复制粘贴,但似乎没有一个工作。我甚至尝试重新安装Gradle...那里的示例代码很少,尽管我理解这个概念,但似乎很难将我的意图转化为工作的Gradle代码,因此,如果有任何好的资源可以提供帮助,也将不胜感激。


答案 1

task1.finalizedBy task2将在任务 1 之后运行任务 2。


答案 2

您应该阅读有关分级任务的信息以及有关任务的更多信息。你想依靠事物而不是调用事物。

另外,我认为您应该阅读并使用gradle android插件

对于您的原始问题,当您定义任务时,大括号之间的代码将在配置时运行。任务的操作在执行任务时运行,必须添加到任务的操作列表中。这是通过使用任务的 doFirst、doLast 或 << 运算符来完成的。

下面是来自 gradle 文档的一个示例。

task taskX << {
    println 'taskX'
}
task taskY << {
    println 'taskY'
}
task taskZ << {
    println 'taskZ'
}
taskX.dependsOn taskY
taskY.dependsOn taskZ
taskZ.shouldRunAfter taskX

推荐