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

Zen*_*aro 13 java android gradle

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

gradle :drmdexsecondary:compileReleaseJava --info --debug --stacktrace
gradle :drmdexsecondary:dexClasses --info --debug --stacktrace
gradle :drmdexsecondary:jar --info --debug --stacktrace
Run Code Online (Sandbox Code Playgroud)

这是我的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")
}
Run Code Online (Sandbox Code Playgroud)

我的问题基本上是:1.dependsOn关键字不起作用...它只是被忽略而没有任何日志消息2. taskname.execute()函数不起作用...它只是被忽略而没有任何日志消息3. compileReleaseJava在构建内部无法识别.gradle有这个特殊的错误:Could not find property 'compileJava' on task ':drmdexsecondary:dexClasses'.

有人请帮忙吗?我已经从文档中查阅并复制了粘贴,但它们似乎都没有用.我甚至试图重新安装gradle ...那里的示例代码很少,虽然我理解这个概念,但是将我的意图转换为工作的gradle代码似乎很难,所以如果有任何好的资源可以提供帮助,非常感谢...谢谢!

tsc*_*ann 19

task1.finalizedBy task2 将在 task1 之后运行 task2。

  • 谢谢你!`finalizedBy` 正是我正在寻找的!:) (2认同)

dit*_*kin 15

您应该阅读gradle任务以及有关任务的更多信息.你想依赖事物而不是调用事物.

另外我认为你应该阅读,并使用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
Run Code Online (Sandbox Code Playgroud)


小智 6

最佳答案在这里

task myTask1() {
  println("this is task1 running") 
}

task task2() { dependsOn myTask1
  println("this is task2 running") 
}
Run Code Online (Sandbox Code Playgroud)

当您执行 gradle task2时。

这将首先执行任务1,然后执行任务2

你应该使用dependsOn关键字

例如

task myTask1() {
  println("this is task1 running") 
}

task task2() { dependsOn myTask1
  println("this is task2 running") 
}
Run Code Online (Sandbox Code Playgroud)

上面的答案将不起作用任务 moveApkFileToProjectFolder 运行,将首先运行 buildMyApk。

我的示例任务,首先将构建 apk。然后将 apk 文件移动到我的 Project/apkFile 文件夹。并执行成功。