天天看點

gradle系列—— Copy任務 Task進階用法

今日名言

我們每天都在經受巨大的痛苦,而最大的痛苦就是不被人了解

文章目錄

    • 導讀
    • 配置任務

導讀

通過上一節gradle系列——Task任務簡單使用 我們知道了gradle中Task的簡單使用,比如如何給任務添加行為,如何為任務設定依賴關系,下面我們開始針對Copy任務來詳解Task的進階用法

在開發的過程中,我們見過很多種定義任務的方式,不要奇怪,gradle的文法比較松散,基本上有這些方式定義

// 第一種,比較普通的方式
task hello {
    doLast {
        println "Hello World!"
    }
}

// 第二種,以字元串形式定義的
task('hello') {
    doLast {
        println "hello"
    }
}

// 第三種,以字元串形式定義的,
// 其類型為Copy任務類型,接下來會具體講解
task('copy', type: Copy) {
    from(file('srcDir'))
    into(buildDir)
}

// 第四種,使用create建立
tasks.create(name: 'hello') {
    doLast {
        println "hello"
    }
}

// 第四種,使用create建立
tasks.create(name: 'copy', type: Copy) {
    from(file('srcDir'))
    into(buildDir)
}
           

如果遇見上面這些方式不要慌張,他們表示的意思都是一樣的

配置任務

我們針對copy任務進行配置,了解了copy任務的配置,我們就可以舉一反三進行其他任務的配置

首先我們定義一個任務

task myCopy(type: Copy) {
   from 'src'
   into 'target'
   include('**/*.txt', '**/*.xml', '**/*.properties')
}
           

該任務實作了把src目錄下的所有 .txt、.xml 和 .properties 檔案全部拷貝到

target

目錄下。

比如我們要拷貝一個檔案時需要對檔案進行改名,我們可以這麼寫

task myCopy(type: Copy) {
  from 'src'
  into 'target'
  include('text.txt')
  // 改名操作
  rename { String fileName ->
     fileName = "gai.txt"
  }
}
           

有一個重要的問題,我們從何處得知這些操作如何做呢

當然是官網:gradle官網

Gradle 中很多其它常用的任務,比如

Jar

Delete

War

Zip

Tar

Upload

等等,這些的用法和 Copy 配置一樣,大家可以自己編寫任務測試下

這裡貼一個Jar類型的任務

打包jar的一個任務

task makeJar(type: Jar) {
    // 輸入檔案
    from zipTree(file('classes.jar'))
    // 添加檔案
    from fileTree(dir: 'src/main', includes: ['assets/**']) // 打包assets目錄下的所有檔案
    // 輸出名稱 會自動加上.jar    
    baseName = "test"
    // 輸出路徑
    destinationDir = file('des/jar/')
}
           

繼續閱讀