2016-01-06 2 views
5

Я хотел удалить файл makefile проекта и написать несколько хороших задач градации. мне нужно выполнить следующие задачи, в следующем порядке:Выполнять задачи сборки андроида в пользовательских задачах

  1. Чистая версия
  2. Increment
  3. Построить
  4. Загрузить

# 1, # 3 и # 4 являются задачи из андроид и плагин (bintray), а # 2 - это настраиваемая задача. Вот то, что я до сих пор:

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

Порядок запуска был не столь велик, как я думаю, что clean был запущен после того, как build. И binrayUpload бежал без запаха (release). Я также пытался использовать dependsOn без успеха (заказ не работает).

Я не мог найти в Gradle doc, как это сделать должным образом. Когда выполняется в правильном порядке, из CLI все работает отлично.

+0

Как вы использовали 'dependOn'? – 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

спасибо, отлично работает. Поэтому, если я прав, 'dependOn' - это задачи, которые будут выполняться в' 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

Цепочка 'dependOn' не является хорошим решением в этом сценарии, потому что вы можете больше не запускать каждую отдельную задачу, если хотите, не запуская сначала задачи по цепочке. Задачи OPs действительно являются самостоятельными задачами. – RaGe