在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ 物聯(lián)網(wǎng)/ 跳過 up-to-date 的任務
使用構(gòu)建腳本塊應用插件
使用方法
獲取依賴列表
Logging
第 22 章 Java 插件
更多關(guān)于插件
從外部工具和庫記錄日志
調(diào)用 Ant 任務
22.9.Clean
Java 構(gòu)建入門
文件集合
依賴管理
建立項目
定位 tasks
構(gòu)建一個 WAR 文件
下載與安裝
使用其他的腳本配置項目
工具和集成開發(fā)環(huán)境
公共配置
擴展屬性
只能在構(gòu)建腳本中使用
通用配置
22.13.測試
構(gòu)建日志
文件樹
22.11.編譯 java
公共屬性
查找社區(qū)插件
使用 Gradle 圖形界面
總結(jié)
任務
局部變量
配置任意對象
導入一個Ant構(gòu)建
不能與subjects{},allprojects{}等結(jié)合使用
特點
失敗后繼續(xù)執(zhí)行構(gòu)建
孵化中的軟件開發(fā)插件
List 和 Map 集合
閉合作為方法的最后一個參數(shù)
War 插件 (未完成)
腳本 API
使用 Gradle 命令行
Java 插件
Task 規(guī)則
依賴管理的基礎(chǔ)知識
替換 tasks
22.7.1.Source Set 屬性
應用插件
項目之間的依賴
任務
War
文件操作
聲明你的依賴
教程
編寫構(gòu)建腳本
改變Gradle的記錄內(nèi)容
Running your web application
構(gòu)建腳本代碼
22.12.增量Java編譯
Groovy JDK
跳過 tasks
倉庫
定義一個多項目構(gòu)建
發(fā)布 artifacts
短標記法
22.14.1.Manifest
補充
Standard Gradle plugins
使用其他的腳本配置任意對象
復制文件
總結(jié)
如何停止守護進程
使用已經(jīng)存在的任務
如何啟動Gradle的守護進程
Gradle 屬性 和 system 屬性
一個基礎(chǔ)的 Java 項目
Choosing a log level
查看特定依賴
屬性存取器
定義 tasks
集成插件
未來可能的改進
項目布局
在構(gòu)建中使用自定義Ant任務
Groovy 基礎(chǔ)
一個基本的 Groovy 項目
搖籃守護進程如何使構(gòu)建速度更快
創(chuàng)建一個發(fā)行版本
22.13.1.執(zhí)行測試
管理和配置
動態(tài)任務
22.13.2.調(diào)試
總結(jié)
外部的依賴
如何禁用Gradle的守護進程
跳過 up-to-date 的任務
概述
快捷的任務定義
軟件開發(fā)插件
項目 API
語言插件
自定義任務屬性
關(guān)于這本指南
22.15.上傳
插件DSL的限制
配置 tasks
多任務調(diào)用
可有可無的圓括號
API
守護進程何時會出錯
使用一個歸檔文件的內(nèi)容作為文件樹
22.13.3.測試過濾
在 Gradle中使用Ant
任務樹
定制War
Projects 和 tasks
終止 tasks
項目列表
任務列表
多項目的 Java 構(gòu)建
22.13.8.公共值
通過 DAG 配置
22.7.2.定義一個新的 source set
獲取構(gòu)建信息
使用同步任務
給 task 加入描述
怎樣抑制“please consider using the Gradle Daemon”消息
Locating files
22.8.Javadoc
網(wǎng)頁應用快速入門
項目布局
什么是 Gradle 的守護進程
22.14.Jar
任務依賴
二進制插件
The Gradle Daemon
安裝 Gradle
介紹
排除任務
22.7.3.一些 source set 的例子
什么時候不使用Gradle守護進程
編寫自己的日志信息
定制項目
基礎(chǔ)插件
JVM 選項
22.13.6.測試分組
依賴管理
聲明變量
約束語法
孵化中的語言插件
收藏夾
外部的依賴
閉合委托對象
發(fā)布 JAR 文件
22.10.資源
Gradle 插件
16.1.使用 Ant 任務和 Ant 類型的構(gòu)建
Hello world
選擇執(zhí)行構(gòu)建
孵化中的集成插件
深入了解 Tasks
構(gòu)建腳本的基礎(chǔ)知識
使用資源設(shè)置
指定一組輸入文件
默認任務
插件的作用是什么
給 task 加入依賴
什么是依賴管理?
22.13.4.通過系統(tǒng)屬性執(zhí)行單獨測試
守護進程占用多大內(nèi)存并且能不能給它更大的內(nèi)存?
排除故障
準備階段
獲取任務具體信息
22.13.5.測試檢測
為什么會在機器上出現(xiàn)不只一個守護進程
為什么用 Groovy?
腳本插件
使用
Groovy 快速入門
創(chuàng)建歸檔文件
簡化任務名
使用插件的插件DSL
依賴配置
命令行
插件的類型
Gradle 構(gòu)建語言
Ant的屬性與引用
22.13.7.測試報告
創(chuàng)建 Eclipse 項目
給 tasks 排序
用法
獲取項目屬性列表
緩存
標準項目屬性
設(shè)置
資源設(shè)置

跳過 up-to-date 的任務

如果你正在使用一些附加的任務, 比如通過 Java 插件加入的任務, 你可能會注意到 Gradle 會跳過一些任務, 這些任務后面會標注 up-to-date. 代表這個任務已經(jīng)運行過了或者說是最新的狀態(tài), 不再需要產(chǎn)生一次相同的輸出. 不僅僅是這些內(nèi)建任務, 其實你在運行自己的任務時, 也會碰到這種情況.

1. 聲明一個任務的輸入和輸出

讓我們先看一個例子. 這里我們的任務會根據(jù)一個 XML 文件生成好幾個輸出文件. 讓我們運行這個任務 2 次.

例子 15.23. A generator task

build.gradle

task transform {
    ext.srcFile = file('mountains.xml')
    ext.destDir = new File(buildDir, 'generated')
    doLast {
        println "Transforming source file."
        destDir.mkdirs()
        def mountains = new XmlParser().parse(srcFile)
        mountains.mountain.each { mountain ->
            def name = mountain.name[0].text()
            def height = mountain.height[0].text()
            def destFile = new File(destDir, "${name}.txt")
            destFile.text = "$name -> ${height}\n"
        }
    }
}

gradle transform 的輸出

> gradle transform
:transform
Transforming source file.

gradle transform 的輸出

> gradle transform
:transform
Transforming source file.

這里 Gradle 執(zhí)行了這個任務兩次, 即使什么都沒有改變, 它也沒有跳過這個任務. 這個例子里的任務, 它的行為是通過閉包定義的. Gradle 并不知道閉包會做什么, 也并不能自動指出是否這個任務是 up-to-date. 為了使用 Gradle 的 up-to-date 檢測, 你需要定義任務的輸入和輸出.

每個任務都有輸入和輸出屬性, 你需要使用這些屬性來聲明任務的輸入和輸出. 下面的例子中, 我們將聲明 XML 文件作為輸入, 并且把輸出放在一個指定的目錄. 讓我們運行這個任務 2 次.

例子 15.24. 聲明任務的輸入和輸出

build.gradle

task transform {
    ext.srcFile = file('mountains.xml')
    ext.destDir = new File(buildDir, 'generated')
    inputs.file srcFile
    outputs.dir destDir
    doLast {
        println "Transforming source file."
        destDir.mkdirs()
        def mountains = new XmlParser().parse(srcFile)
        mountains.mountain.each { mountain ->
            def name = mountain.name[0].text()
            def height = mountain.height[0].text()
            def destFile = new File(destDir, "${name}.txt")
            destFile.text = "$name -> ${height}\n"
        }
    }
}

gradle transform 的輸出

> gradle transform
:transform
Transforming source file.

gradle transform 的輸出

> gradle transform
:transform UP-TO-DATE

現(xiàn)在, Gradle 就能夠檢測出任務是否是 up-to-date 狀態(tài).

任務的輸入屬性是 TaskInputs 類型. 任務的輸出屬性是 TaskOutputs 類型.

一個任務如果沒有定義輸出的話, 那么它永遠都沒用辦法判斷 up-to-date. 對于某些場景, 比如一個任務的輸出不是文件, 或者更復雜的場景, TaskOutputs.upToDateWhen() 方法會計算任務的輸出是否應被視為最新.

總而言之, 如果一個任務只定義了輸出, 如果輸出不變的話, 它就會被視為 up-to-date.

2. 它是如何工作的?

當一個任務是首次執(zhí)行時, Gradle 會取一個輸入的快照 (snapshot). 該快照包含組輸入文件和每個文件的內(nèi)容的散列. 然后當 Gradle 執(zhí)行任務時, 如果任務成功完成,Gradle 會獲得一個輸出的快照. 該快照包含輸出文件和每個文件的內(nèi)容的散列. Gradle 會保留這兩個快照用來在該任務的下一次執(zhí)行時進行判斷.

之后, 每次在任務執(zhí)行之前, Gradle 都會為輸入和輸出取一個新的快照, 如果這個快照和之前的快照一樣, Gradle 就會假定這個任務已經(jīng)是最新的 (up-to-date) 并且跳過任務, 反之亦然.

需要注意的是, 如果一個任務有指定的輸出目錄, 自從該任務上次執(zhí)行以來被加入到該目錄的任務文件都會被忽略, 并且不會引起任務過時 (out of date). 這是因為不相關(guān)任務也許會共用同一個輸出目錄. 如果這并不是你所想要的情況, 可以考慮使用 TaskOutputs.upToDateWhen()

上一篇:插件DSL的限制下一篇:Logging