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

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

跳過(guò) up-to-date 的任務(wù)

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

1. 聲明一個(gè)任務(wù)的輸入和輸出

讓我們先看一個(gè)例子. 這里我們的任務(wù)會(huì)根據(jù)一個(gè) XML 文件生成好幾個(gè)輸出文件. 讓我們運(yùn)行這個(gè)任務(wù) 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í)行了這個(gè)任務(wù)兩次, 即使什么都沒(méi)有改變, 它也沒(méi)有跳過(guò)這個(gè)任務(wù). 這個(gè)例子里的任務(wù), 它的行為是通過(guò)閉包定義的. Gradle 并不知道閉包會(huì)做什么, 也并不能自動(dòng)指出是否這個(gè)任務(wù)是 up-to-date. 為了使用 Gradle 的 up-to-date 檢測(cè), 你需要定義任務(wù)的輸入和輸出.

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

例子 15.24. 聲明任務(wù)的輸入和輸出

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 就能夠檢測(cè)出任務(wù)是否是 up-to-date 狀態(tài).

任務(wù)的輸入屬性是 TaskInputs 類(lèi)型. 任務(wù)的輸出屬性是 TaskOutputs 類(lèi)型.

一個(gè)任務(wù)如果沒(méi)有定義輸出的話(huà), 那么它永遠(yuǎn)都沒(méi)用辦法判斷 up-to-date. 對(duì)于某些場(chǎng)景, 比如一個(gè)任務(wù)的輸出不是文件, 或者更復(fù)雜的場(chǎng)景, TaskOutputs.upToDateWhen() 方法會(huì)計(jì)算任務(wù)的輸出是否應(yīng)被視為最新.

總而言之, 如果一個(gè)任務(wù)只定義了輸出, 如果輸出不變的話(huà), 它就會(huì)被視為 up-to-date.

2. 它是如何工作的?

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

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

需要注意的是, 如果一個(gè)任務(wù)有指定的輸出目錄, 自從該任務(wù)上次執(zhí)行以來(lái)被加入到該目錄的任務(wù)文件都會(huì)被忽略, 并且不會(huì)引起任務(wù)過(guò)時(shí) (out of date). 這是因?yàn)椴幌嚓P(guān)任務(wù)也許會(huì)共用同一個(gè)輸出目錄. 如果這并不是你所想要的情況, 可以考慮使用 TaskOutputs.upToDateWhen()

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