99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

Gradle復制文件

2020-07-24 16:01 更新

你可以使用復制任務( Copy )去復制文件. 復制任務擴展性很強,能夠過濾復制文件的內容, 映射文件名.

使用復制任務時需要提供想要復制的源文件和一個目標目錄,如果你要指定文件被復制時的轉換方式,可以使用 復制規(guī)則. 復制規(guī)則被 CopySpec 接口抽象,復制任務實現(xiàn)了這個接口. 使用 CopySpec.from() 方法指定源文件.使用 CopySpec.into() 方法指定目標目錄.

例 15.10. 使用復制任務復制文件

build.gradle

task copyTask(type: Copy) {
    from 'src/main/webapp'
    into 'build/explodedWar'
}

from() 方法接收任何 files() 方法支持的參數(shù). 當參數(shù)被解析為一個目錄時,在這個目錄下的任何文件都會被遞歸地復制到目標目錄(但不是目錄本身).當一個參數(shù)解析為一個文件時,該文件被復制到目標目錄中.當參數(shù)被解析為一個不存在的文件時,這個參數(shù)就會忽略.如果這個參數(shù)是一個任務,任務的輸出文件(這個任務創(chuàng)建的文件)會被復制,然后這個任務會被自動添加為復制任務的依賴.

例 15.11 指定復制任務的源文件和目標目錄

build.gradle

task anotherCopyTask(type: Copy) {
    // 復制 src/main/webapp 目錄下的所有文件
    from 'src/main/webapp'
    // 復制一個單獨文件
    from 'src/staging/index.html'
    // 復制一個任務輸出的文件
    from copyTask
    // 顯式使用任務的 outputs 屬性復制任務的輸出文件
    from copyTaskWithPatterns.outputs
    // 復制一個 ZIP 壓縮文件的內容
    from zipTree('src/main/assets.zip')
    // 最后指定目標目錄
    into { getDestDir() }
}

你可以使用Ant-style 規(guī)則或者一個閉合選擇要復制的文件.

例 15.12 選擇要復制文件

build.gradle

task copyTaskWithPatterns(type: Copy) {
    from 'src/main/webapp'
    into 'build/explodedWar'
    include '**/*.html'
    include '**/*.jsp'
    exclude { details -> details.file.name.endsWith('.html') &&
                         details.file.text.contains('staging') }
}

你也可以使用 Project.copy() 方法復制文件,它的工作方式有一些限制,首先該方法不是增量的,請參考 第 14.9節(jié) 跳過最新的任務.第二,當一個任務被用作復制源時(例如 from() 方法的參數(shù)), copy() 方法不能夠實現(xiàn)任務依賴,因為它是一個普通的方法不是一個任務.因此,如果你使用 copy()方法作為一個任務的一部分功能,你需要顯式的聲明所有的輸入和輸出以確保獲得正確的結果.

例 15.13 不使用最新檢查方式下用 copy() 方法復制文件

build.gradle

task copyMethod << {
    copy {
        from 'src/main/webapp'
        into 'build/explodedWar'
        include '**/*.html'
        include '**/*.jsp'
    }
}

例 15.14 使用最新的檢查方式下用 copy() 方法復制文件

build.gradle

task copyMethodWithExplicitDependencies{

     // 對輸入做最新檢查,添加 copyTask 作為依賴
    inputs.file copyTask
    outputs.dir 'some-dir' //對輸出做最新檢查
    doLast{
        copy {
            // 復制 copyTask 的輸出
            from copyTask
            into 'some-dir'
        }
    }
}

建議盡可能的使用復制任務,因為它支持增量化的構建和任務依賴推理,而不需要去額外的費力處理這些.不過copy() 方法可以用作復制任務實現(xiàn)的一部分.即該 方法被在自定義復制任務中使用,請參考 第60章 編寫自定義任務.在這樣的場景下,自定義任務應該充分聲明與復制操作相關的輸入/輸出。

15.6.1 重命名文件

例 15.15 在復制時重命名文件

build.gradle

task rename(type: Copy) {
    from 'src/main/webapp'
    into 'build/explodedWar'
    // 使用一個閉合映射文件名
    rename { String fileName ->
        fileName.replace('-staging-', '')
    }
    // 使用正則表達式映射文件名
    rename '(.+)-staging-(.+)', '$1$2'
    rename(/(.+)-staging-(.+)/, '$1$2')
}

15.6.2 過濾文件

例 15.16 在復制時過濾文件

build.gradle

import org.apache.tools.ant.filters.FixCrLfFilter
import org.apache.tools.ant.filters.ReplaceTokens

task filter(type: Copy) {
    from 'src/main/webapp'
    into 'build/explodedWar'
    // 在文件中替代屬性標記
    expand(copyright: '2009', version: '2.3.1')
    expand(project.properties)
    // 使用 Ant 提供的過濾器
    filter(FixCrLfFilter)
    filter(ReplaceTokens, tokens: [copyright: '2009', version: '2.3.1'])
    // 用一個閉合來過濾每一行
    filter { String line ->
        "[$line]"
    }
    // 使用閉合來刪除行
    filter { String line ->
        line.startsWith('-') ? null : line
    }
}

在源文件中擴展和過濾操作都會查找的某個標志 token,如果它的名字是 tokenName , 它的格式應該類似于 @tokenName@.

15.6.3 使用 CopySpec 類

復制規(guī)范來自于層次結構,一個復制規(guī)范繼承其目標路徑,包括模式,排除模式,復制操作,名稱映射和過濾器.

例 15.17. 嵌套復制規(guī)范

build.gradle

task nestedSpecs(type: Copy) {
    into 'build/explodedWar'
    exclude '**/*staging*'
    from('src/dist') {
        include '**/*.html'
    }
    into('libs') {
        from configurations.runtime
    }
}


以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號