Gradle文件集合

2020-07-24 16:00 更新

文件集合表示一組文件,Gradle 使用 FileCollection 接口表示文件集合, Gradle API 中的許多項(xiàng)目都實(shí)現(xiàn)了這個(gè)接口,例如 dependency configurations .

獲取 FileCollection 實(shí)例的一種方法是使用 Project.files() 方法.你可以傳遞任何數(shù)量的對(duì)象參數(shù),這個(gè)方法能將你傳遞的對(duì)象集合轉(zhuǎn)換為一組文件對(duì)象.files() 方法接收任何類型對(duì)象參數(shù).每一個(gè) file()方法都依賴于項(xiàng)目目錄(在第 15 章,第一小節(jié)中介紹).files()方法也接收 collections, iterables,maps 和 arrays 類型參數(shù).這些參數(shù)的內(nèi)容會(huì)被解析,然后被轉(zhuǎn)換為文件對(duì)象.

例 15.2 創(chuàng)建文件集合

build.gradle

FileCollection collection = files('src/file1.txt',
                                  new File('src/file2.txt'),
                                  ['src/file3.txt', 'src/file4.txt'])

文件集合可以被迭代器,使用迭代操作能夠?qū)⑵滢D(zhuǎn)換為其他的一些類型.你可以使用 + 操作將兩個(gè)文件集合合并,使用 - 操作能夠?qū)σ粋€(gè)文件集合做減法.下面一些例子介紹如何操作文件集合.

例 15.3 使用文件集合

build.gradle

// 對(duì)文件集合進(jìn)行迭代
collection.each {File file ->
    println file.name
}

// 轉(zhuǎn)換文件集合為其他類型
Set set = collection.files
Set set2 = collection as Set
List list = collection as List
String path = collection.asPath
File file = collection.singleFile
File file2 = collection as File

// 增加和減少文件集合
def union = collection + files('src/file3.txt')
def different = collection - files('src/file3.txt')

你也可以向 files() 方法專遞一個(gè)閉合或者可回調(diào)的實(shí)例參數(shù).當(dāng)查詢集合的內(nèi)容時(shí)就會(huì)調(diào)用它,然后將返回值轉(zhuǎn)換為一些文件實(shí)例.返回值可以是 files() 方法支持的任何類型的對(duì)象.下面有個(gè)簡(jiǎn)單的例子來演示實(shí)現(xiàn) FileCollection 接口

例 15.4 實(shí)現(xiàn)一個(gè)文件集合

build.gradle

task list << {
    File srcDir

    // 使用閉合創(chuàng)建一個(gè)文件集合
    collection = files { srcDir.listFiles() }

    srcDir = file('src')
    println "Contents of $srcDir.name"
    collection.collect { relativePath(it) }.sort().each { println it }

    srcDir = file('src2')
    println "Contents of $srcDir.name"
    collection.collect { relativePath(it) }.sort().each { println it }
}

使用 gradle -q list 輸出結(jié)果

> gradle -q list
Contents of src
src/dir1
src/file1.txt
Contents of src2
src2/dir1
src2/dir2

另外, files() 方法也接收其他類型的參數(shù):

FileCollection

內(nèi)容損壞的文件包含在文件集合中.

Task

任務(wù)的輸出文件包含在文件集合中.

TaskOutputs

TaskOutputs 的輸出文件包含在文件集合中

值得注意的是當(dāng)有需要時(shí)文件集合的內(nèi)容會(huì)被被惰性處理,就比如一些任務(wù)在需要的時(shí)候會(huì)創(chuàng)建一個(gè)FileCollecion 代表的文件集合.


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)