基本上我需要按顺序运行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.使用此特定错误在build.gradle中无法识别compileReleaseJava
:Could not find property 'compileJava' on task ':drmdexsecondary:dexClasses'.
有人请帮忙吗?我已经从文档中查阅并复制了粘贴,但它们似乎都不起作用。我甚至试图重新安装gradle ...那里的示例代码很少,虽然我理解这个概念,但是将我的意图转换为工作的gradle代码似乎很难,所以如果有任何好的资源来帮助,非常感谢...谢谢!
答案 0 :(得分:11)
您应该阅读gradle tasks和more about tasks。你想依赖事物而不是调用事物。
此外,我认为您应该阅读并使用gradle android plugin。
对于原始问题,在定义任务时,大括号之间的代码在配置时运行。执行任务时会运行任务的操作,并且必须将其添加到任务的操作列表中。这是通过使用任务的doFirst,doLast或<<操作
以下是gradle文档中的示例。
task taskX << {
println 'taskX'
}
task taskY << {
println 'taskY'
}
task taskZ << {
println 'taskZ'
}
taskX.dependsOn taskY
taskY.dependsOn taskZ
taskZ.shouldRunAfter taskX
答案 1 :(得分:4)
task myTask1() {
println("this is task1 running")
}
task task2() { dependsOn myTask1
println("this is task2 running")
}
当您执行渐变任务2 时。
这将首先执行task1,然后执行task2
例如
task buildMyApk(type: Exec) {
def myCommond = ['gradle', "assembleRelease"]
commandLine myCommond
}
task moveApkFileToProjectFolder() { dependsOn buildMyApk
def releaseApkFilePath = "${buildDir}/outputs/apk/release/"
def targetApkFolder = "${rootProject.getProjectDir()}/apkFolder"
mkdir "${targetApkFolder}"
copy{
from releaseApkFilePath
into targetApkFolder
}
}
以上答案无效 任务moveApkFileToProjectFolder运行,将首先运行buildMyApk。
我的示例任务,首先将构建apks,然后将apk文件移动到我的Project / apkFile文件夹中,然后执行成功。
答案 2 :(得分:3)
对于顺序或任何您想要运行任务的序列,我在build.gradle文件中执行以下操作:
def modules = ["X", "Y", "Z", "ZZ"]
if (modules.size() > 1) {
for(j in 1 .. modules.size()-1 ) {
tasks[modules[j]].mustRunAfter modules[values[j-1]]
}
}
答案 3 :(得分:0)
task1.finalizedBy task2
将在task1之后运行task2。