2016-01-06 173 views
5

我想删除项目makefile并编写一些很好的gradle任务。 我需要执行以下任务,顺序如下:在自定义任务中执行android构建任务

  1. 清洁
  2. 增量版本
  3. 构建
  4. 上传

#1,#3,#4是从任务android和插件(bintray),而#2是一个自定义任务。以下是我迄今为止:

task releaseMajor { 
    doLast { 
     clean.execute() 
     build.execute() 
     incrementVersion.execute() 
     bintrayUpload.execute() 
    } 
} 

运行顺序是没有那么大,因为我认为cleanbuild后运行。并且binrayUpload运行时没有味道(release)。我也尝试使用dependsOn没有成功(命令不起作用)。

我无法在Gradle doc中找到如何正确执行此操作。当按照正确的顺序执行命令时,一切都完美无缺。

+0

你是如何使用'dependsOn'的? – RaGe

回答

2

使用mustRunAfter,或finalizedBy对于更精细的顺序控制:

task releaseMajor (dependsOn: ['clean', 'build', 'incrementVersion', 'bintrayUpload']) 
build.mustRunAfter clean 
incrementVersion.mustRunAfter build 
bintrayUpload.mustRunAfter incrementVersion 
+0

这样做会不会在每次清洁后运行,例如构建? –

+0

否。有关更多信息,请参阅第17.5节[此处](https://docs.gradle.org/current/userguide/more_about_tasks.html)。 – RaGe

+0

谢谢,效果很好。所以,如果我是正确的,'dependsOn'是将在'releaseMajor'中运行的任务,但是直到指定它之后才会遵守顺序。根据文档,在日常执行中,'build'不会在'clean'后面运行。我读过两次文档,但对我来说不是很清楚。 –

0

尝试这样

task clean { 
    println 'clean task executing' 
} 
task incrementVersion (dependsOn:"clean"){ 
    println 'incrementVersion task executing' 
} 
task building (dependsOn:"incrementVersion"){ 
    println 'build task executing' 
} 
task bintrayUpload (dependsOn:"building") { 
    println 'bintrayUpload task executing' 
} 

输出是

clean task executing 
incrementVersion task executing 
build task executing 
bintrayUpload task executing 

并执行./gradlew bintryUpload

+0

我使用已经完成的android任务,名为'clean'或'build'。我可以重新定义它。 –

+0

在这种情况下,链接'dependsOn'并不是一个好的解决方案,因为如果你愿意,你不能再运行每个单独的任务,而不会首先触发链上的任务。 OPs任务通常是独立的任务。 – RaGe