2013-04-23 88 views
4

我有以下項目結構如何在子項目任務結束一次執行任務的搖籃

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 2013-07-30 20:54:55

+0

@ZenBalance你期望它首先運行的原因是什麼?不是確保最後運行的最後一行(取決於所有子項目的部署任務)。 – TWiStErRob 2015-06-24 16:40:38

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

如果命令行是:'gradle subproject1:dist',如何強制'finalizeDist'執行? – TWiStErRob 2015-06-24 16:37:21