2013-04-23 3 views
4

Я работаю со следующей структурой проектаКак выполнить задачу Gradle один раз в конце задач подпроекта

Project 
|-Subproject1 
|-Subproject2 
|build.gradle 
|settings.gradle 

Подмодули включены в settings.gradle и сконфигурированной в build.gradle корне проекта.

У меня есть 3 задачи, чтобы сделать

  1. build (каждый подпроект имеет это)
  2. deploy (это механизм упаковки для каждого подпроекта должен работать самостоятельно)
  3. finalizeDeployment (это необходимо который будет вызван только один раз)

Я хочу, чтобы быть в состоянии назвать

$gradle deploy < - все подпроекты получить развернутый и окончательное оформление вызывается раз в конце

< $gradle Subproject1:deploy - Subproject1 развертывается и окончательное оформление вызывается

build.gradle

configure(subprojects) { 

    task build <<{ 
     println "Do Build "+ project.name 
    } 

    task deploy(dependsOn:build){ 
     println 'deploy '+project.name 

     doLast{ 
      finalizeDeployment.execute() 
     } 
    } 
} 

task finalizeDeployment{ 

    dependsOn subprojects.deploy 

    doLast{ 
     println 'Finalize Deployment' 
    } 
} 

ответ

4

Он работает следующим образом

configure(subprojects) { 

    task build << { 
     println "Do Build " + project.name 
    } 

    task deployPrepare(dependsOn: build)<<{ 
      println 'deploy ' + project.name 
    } 

    task deployFinalize(dependsOn: deployPrepare)<<{ 
     parent.deployFinalize.execute() 
    } 
} 

task deployFinalize { 

    doLast { 
     println 'Finalize Deployment' 
    } 
} 

deployFinalize.dependsOn(subprojects.deployPrepare) 

Консоль вывода для gradle subproject1:deployFinalize является:

Do Build subproject1 
deploy subproject1 
Finalize Deployment 

Консоль вывода для gradle deployFinalize является:

Do Build subproject1 
deploy subproject1 
Do Build subproject2 
deploy subproject2 
Finalize Deployment 
+0

Мне нравится работать вокруг решения. Однако (из-за текущего состояния Gradle) логика вызова по-прежнему немного запутанна, так как вам нужно вызвать deployFinalize для того, чтобы одноименная задача была запущена последней (можно было бы сначала запустить ее в интуитивном режиме). – ZenBalance

+0

@ ZenBalance, в чем причина, по которой вы ожидаете его запуска? Не последняя строка, удостоверяющая, что она запущена последней (это зависит от всех задач развертывания подпроектов). – TWiStErRob

0

Похоже, вы можете получить ту же функциональность с зависимостями без необходимости использования parent.deployFinalize.execute ().

Где я работаю мы используем:

subprojects { 

    task dist(type: Copy, dependsOn: assemble) { 
     ... 
    } 
} 

task dist 
dist.dependsOn subprojects.dist 

task finalizeDist(dependsOn : subprojects.dist) { 
    ... 
} 
dist.dependsOn finalizeDist 
+0

Как это заставить 'finalizeDist' выполнить, если в командной строке:' gradle subproject1: dist'? – TWiStErRob

Смежные вопросы