<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## 1.任務的定義 之前我們定義任務的時候采用的是task + 任務名的方式。例如 ~~~ task hello << { println "hello" } ~~~ 現在再介紹另外兩種方式,和上面的定義是等價的。 ~~~ task(hello)<<{ println "hello" } ~~~ ~~~ task('hello')<<{ println "hello" } ~~~ gradle還提供了一個tasks容器來創建任務,通過調用create方法: ~~~ tasks.create(name:'hello')<<{ println "hello" } ~~~ ## 2\. 任務的定位 **將任務看成項目的屬性的方式** ~~~ task hello println hello.name println project.hello.name ~~~ ~~~ qianhuis-Mac-mini:0111_1 qianhui$ gradle -q hello hello hello ~~~ **使用tasks容器來定位** ~~~ task hello println tasks.hello.name println tasks['hello'].name ~~~ ~~~ qianhuis-Mac-mini:0111_1 qianhui$ gradle -q hello hello hello ~~~ **tasks.getByPath()方式來獲得** ~~~ task hello println tasks.getByPath('hello').path println tasks.getByPath(':hello').path ~~~ ~~~ qianhuis-Mac-mini:0111_1 qianhui$ gradle -q hello :hello :hello ~~~ ## 3.配置任務 ~~~ task myCopy(type:Copy) println myCopy.name ~~~ 定義一個Copy類型名為myCopy的任務。 ~~~ qianhuis-Mac-mini:0111_1 qianhui$ gradle -q myCopy myCopy ~~~ **配置任務的第一種方式** ~~~ Copy myCopy = task(myCopy,type:Copy) myCopy.from 'resources' myCopy.into 'target' myCopy.include('**/*.txt','**/*.xml','**/*.properties') ~~~ 這種方式每次都需要先顯式的定義一個對象。比較麻煩。下面有另外一種更好的方式: **配置任務的第二種方式** ~~~ Copy myCopy = task(myCopy,type:Copy) myCopy{ from 'resources' into 'target' include('**/*.txt','**/*.xml','**/*.properties') } ~~~ 這種方式適用于任何任務,第二行myCopy是tasks.getByName的縮寫方式。這種方式在配置的時候是有作用的,在執行的時候是不起作用的。 **配置任務的第三種方式** 閉包方式: ~~~ task copy(type:Copy){ from 'resources' into 'target' include('**/*.txt','**/*.xml','**/*.properties') } ~~~ ## 4.配置任務依賴 #### 以任務名的方式定義依賴 依賴其他項目的任務,要想實現該例子,首先要記得settings.gradle在多項目的必要性,所以我們先編寫settings.gradle: ~~~ include "projectA","projectB" ~~~ 這樣我們的build.gradle就能識別出這兩個子項目,接下來在build.gradle中實現依賴其他項目的任務。 ~~~ project('projectA'){ task taskX(dependsOn:':projectB:taskY')<<{ println 'taskX' } } project('projectB'){ task taskY <<{ println 'taskY' } } ~~~ 執行命令: ~~~ qianhuis-Mac-mini:0111_1 qianhui$ gradle -q taskX taskY taskX ~~~ 這是在根項目的build.gradle來定義2個子項目的任務。在正常情況下,我們應該是在各自的項目中,然后來定義項目之間的依賴,所以我們現在分拆taskX 和taskY兩個任務到各自的目錄中。 在projectA的build.gradle文件中添加: ~~~ task taskX(dependsOn:':projectB:taskY')<<{ println 'taskX' } ~~~ 在projectB 的build.gradle文件中添加: ~~~ task taskY <<{ println 'taskY' } ~~~ 然后將剛才跟目錄中的build.gradle中的內容刪除,避免造成任務沖突。然后在projectA 下執行命令: ~~~ qianhuis-Mac-mini:projectA qianhui$ gradle -q taskX taskY taskX ~~~ #### 你可以通過task對象來配置依賴 ~~~ task taskX << { println 'taskX' } task taskY <<{ println 'taskY' } taskX.dependsOn taskY ~~~ 輸出: ~~~ qianhuis-Mac-mini:0111_1 qianhui$ gradle -q taskX taskY taskX ~~~ #### 使用閉包的方式配置依賴 ~~~ task taskX << { println 'taskX' } taskX.dependsOn{ tasks.findAll{ task -> task.name.startsWith('lib') } } task lib1<<{ println 'lib1' } task lib2 <<{ println 'lib2' } ~~~ 執行任務輸出: ~~~ qianhuis-Mac-mini:0111_1 qianhui$ gradle -q taskX lib1 lib2 taskX ~~~ ## 5.任務順序 (該功能處在孵化階段,以后可能會改變,所以需要注意) 任務順序的兩個規則:must run after 和 should run after。 當你定義taskX和taskY的關系是必須后執行,那就說明taskX必須在taskY任務執行完才能執行,無論在什么時候。 當你定義taskX和taskY的關系時應該后執行,那就說明不是強制要求的,只是這么做更好點,但是我們應該意識到我們講should 等價于must還是比較好的。 現在來試試這兩種順序的執行的不同: #### mustRunAfter 在build.gradle定義如下: ~~~ task taskX << { println 'taskX' } task taskY <<{ println 'taskY' } taskX.mustRunAfter taskY ~~~ 上面定義了taskX必須在taskY后執行,但是如果這個時候我們只執行taskX呢? ~~~ qianhuis-Mac-mini:0111_1 qianhui$ gradle -q taskX taskX ~~~ 只執行taskY: ~~~ qianhuis-Mac-mini:0111_1 qianhui$ gradle -q tasky taskY ~~~ 從上面可以看出,單獨執行一個任務,是沒有什么一樣的。那現在我們同時執行兩個任務: ~~~ qianhuis-Mac-mini:0111_1 qianhui$ gradle -q tasky taskx taskY taskX qianhuis-Mac-mini:0111_1 qianhui$ gradle -q taskx tasky taskY taskX ~~~ 注意上面我們執行了兩次,但是taskX和taskY順序不一樣,但是結果卻是一樣的,這就說明mustRunAfter奏效了。 #### shouldRunAfter 修改build.gradle文件: ~~~ task taskX << { println 'taskX' } task taskY <<{ println 'taskY' } taskX.shouldRunAfter taskY ~~~ 我們同樣執行4次,輸出如下: ~~~ qianhuis-Mac-mini:0111_1 qianhui$ gradle -q tasky taskY qianhuis-Mac-mini:0111_1 qianhui$ gradle -q taskx taskX qianhuis-Mac-mini:0111_1 qianhui$ gradle -q taskx tasky taskY taskX qianhuis-Mac-mini:0111_1 qianhui$ gradle -q tasky taskx taskY taskX ~~~ 看出不同了么?我是沒看出來,所以官方文檔上的例子還是無法說明他們的區別,等有時間再去質問他們吧。 上面需要注意點的是: taskX.shouldRunAfter taskY == taskX.shouldRunAfter(taskY) taskX.mustRunAfter taskY ==? taskX.mustRunAfter(taskY) 其中的括號和空格時等效的。所以我們要了解的是gradle中調用方法的方式多種的。 有2種情況會使上面定義的順序失效:2個任務之間有依賴和使用 --continue參數 來看看使之失效的例子,上面的例子taskX在taskY后執行,那么這個時候我們定義taskY依賴taskX呢。按我們之前學習依賴中得到的知識,依賴的任務要先執行到。那么看實際執行情況: ~~~ task taskX << { println 'taskX' } task taskY <<{ println 'taskY' } taskY.dependsOn taskX taskX.shouldRunAfter taskY ~~~ ~~~ qianhuis-Mac-mini:0111_1 qianhui$ gradle -q tasky taskx taskX taskY ~~~ 說明依賴的優先級要高于順序的定義。 ## 6.添加任務描述 build.gradle定義如下: ~~~ task taskX { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; description 'this a beatiful world' &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; println 'taskX' } task taskY <<{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; description 'this a bad world' &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; println 'taskY' } ~~~ 執行gradle tasks命令輸出: ~~~ Other tasks ----------- taskX - this a beatiful world taskY ~~~ 為什么taskX和taskY的有一個沒有輸出描述信息,在于taskY的定義中有<<,所以沒能輸出描述信息。那就說明任務的定義中這兩種方式還是有一點區別的。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看