[Android Pro] Gradle Tips#1-tasks

來源:互聯網
上載者:User

標籤:

reference to : http://trickyandroid.com/gradle-tip-1-tasks/

http://blog.csdn.net/lzyzsd/article/details/46934187

今天要講的就是Gradle tasks以及task的配置和運行。可能有的讀者還不瞭解Gradle task,用真實的例子來展示應該更容易被理解。下面的代碼展示了三個Gradle task,稍後會講解這三者的不同。

    task myTask {        println "Hello, World!"    }    task myTask {        doLast {            println "Hello, World!"        }    }    task myTask << {        println "Hello, World!"    }

我的目的是建立一個task,當它執行的時候會列印出來”Hello, World!”。當我第一次建立task的時候,我猜測應該是這樣來寫的:

task myTask {        println "Hello, World!"    }

現在,試著來執行這個myTask,在命令列輸入gradle myTask,列印如下:

    user$ gradle myTask    Hello, World!    :myTask UP-TO-DATE

這個task看起來起作用了。它列印了”Hello, World!”。
但是,它其實並沒有像我們期望的那樣。下面我們來看看為什麼。在命令列輸入gradle tasks來查看所有可用的tasks。

    user$ gradle tasks    Hello, World!    :tasks    ------------------------------------------------------------    All tasks runnable from root project    ------------------------------------------------------------    Build Setup tasks    -----------------    init - Initializes a new Gradle build. [incubating]    ..........

等等,為什麼”Hello, World!”列印出來了?我只是想看看有哪些可用的task,並沒有執行任何自訂的task!
原因其實很簡單,Gradle task在它的生命週期中有兩個主要的階段:設定階段 和 執行階段。
可能我的用詞不是很精確,但這的確能協助我理解tasks。

Gradle在執行task之前都要對task先進行配置。那麼問題就來了,我怎麼知道我的task中,哪些代碼是在配置過程中執行的,哪些代碼是在task執行的時候啟動並執行?答案就是,在task的最頂層的代碼就是配置代碼,比如:

    task myTask {        def name = "Pavel" //<-- 這行代碼會在設定階段執行        println "Hello, World!"////<-- 這行代碼也將在設定階段執行    }

這就是為什麼我執行gradle tasks的時候,會列印出來”Hello, World!”-因為配置代碼被執行了。但這並不是我想要的效果,我想要”Hello, World!”僅僅在我顯式的調用myTask的時候才列印出來。為了達到這個效果,最簡單的方法就是就是使用Task#doLast()方法。

    task myTask {        def text = ‘Hello, World!‘ //configure my task        doLast {            println text //this is executed when my task is called        }    }

現在,”Hello, World!”僅僅會在我執行gradle myTask的時候列印出來。Cool,現在我已經知道如何配置以及使task做正確的事情。還有一個問題,最開始的例子中,第三個task的<<符號是什麼意思?

    task myTask2 << {        println "Hello, World!"     }

這其實只是doLast的一個文法糖版本。它和下面的寫法效果是一樣的:

    task myTask {        doLast {            println ‘Hello, World!‘ //this is executed when my task is called        }    }

但是,這種寫法所有的代碼都在執行部分,沒有配置部分的代碼,因此比較適合那些簡小不需要配置的task。一旦你的task需要配置,那麼還是要使用doLast的版本。

[Android Pro] Gradle Tips#1-tasks

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.