6使用Gradleのカスタムタスクタスク

タスクはGradleのには二つの基本的な概念構築の一つが、様々な形態を定義し、使用しての作業です、以下はあなたにいくつかを定義し、使用しての作業を行いました。

基本的な構文定義されたタスク

// 使用task 后带任务名称 加上执行闭包{}
task t1 {
  println 't1'
}
// 任务名称后加上圆括号
task t2() {
  println 't2'
}
// IDEA 刷新 Task 点击 build 或 左下 Terminal 输入 gradle build 即可看到结果
t1
t2

これらは、タスクの依存関係に加えて、プロジェクトフェーズを設定するとき、結果が実行されるタスクの基本的な定義されている、プロジェクトオブジェクトの動作を設定する必要性への参照が実行されます。あなたはコードがdoFirstタスクコールやdoLast方法で定義する必要がある唯一のアクションを実行する必要がある場合。

一般的なタスクの定義された方法

task t1{
    // 任务调用前执行动作
   doFirst{
       println 't1'
   }
}
// 任务调用后执行动作
task t2(){
    doLast{
       println 't2'
    }
}
// << 是 doLast 的简写,任务调用后执行动作
task t3 << {
    println 't3'
}
// 可给任务名带 ' '

試験:のGradle T1 T2はT3

> Task :t1
t1

> Task :t2
t2

> Task :t3
t3

上記は、タスクを定義するための最も一般的な方法で、プロジェクトの設定のdoFirst doLastメソッドを呼び出すことはありません。タスクまたは他のタスクに直接依存して呼び出されたときにのみ実行されます。それに依存してどのように依存し、ここで終わりでそれ?次の設定は、タスクに依存して見ています。

設定DEPENDSONの依存タスク

依存タスクは、構成に依存しないキーワードDEPENDSONを使用する必要が、構成は一般的な使用法の下であなたに来る次のことを実証し、多くの形式をとります。

task t1 {
    doFirst {
        println 't1'
    }
}
// 定义任务时指明依赖
task t2(dependsOn : t1) {
    doLast {
        println 't2'
    }
}
task t3 << {
    println 't3'
}

task t4 {
    dependsOn t3          // 任务内写依赖
    doLast{
        println 't4'
    }
}
// 外部添加依赖 t1 依赖 t3
t1.dependsOn t4

// 外部增加任务动作达到依赖
t3.doFirst{
    println '给 t3 增加增加动作1'
}
t3 << {
    println '给 t3 增加增加动作2'
}

ミッションT2 gradle t2、次の結果:

> Task :t3
给 t3 增加增加动作1
t3
给 t3 增加增加动作2
> Task :t4
t4
> Task :t1
t1
> Task :t2
t2

これらのタスクは、書き込みのいくつかの一般的な方法に依存している、それの無いタスク、高どの構文の特徴点はありますか?
実際には、いくつかは、Groovyの強力な単純なタスクを定義することができるだけではなくより多くのことを行うことができます。たとえば、動的にタスクを定義することができます。

動的なタスク

4.times {
    val ->
    task "tk${val}" << {
        println "The task is task${val}"
    }
}

上記動的に高速なハードウェアを何高レベルのダイナミックタスクに加えて、4つのタスクのTK0、TK1、TK2、TK3、それを定義するには?実際には、あなたはまた、タスクのプロパティをカスタマイズすることができます。

カスタムタスクに属性

ここで内線で、タスクに属性を追加するにはEXTを使用することは。定義から名前=値属性。

// 给任务添加属性
task tk5{
    ext.myProperty = "The property value"
}
// 获取自定义属性
task printTaskProperty << {
    println tk5.myProperty
}
// ============== 结果 ===================
> Task : printTaskProperty
The property value

木がありますか?
実際には、ここでのタスクのみのみいくつかの一般的な操作を説明し、あなたは公式ドキュメントを参照することができ、より深い知識を学びたいと思っています。

次に、次のタスクを統合する例を使用しています。

例としては、
需要:カスタムタスクを自動的にプロジェクトディレクトリを生成します。

// 定义创建目录的普通方法
def createDir(fileName){
    File f = new File(fileName);
    f.mkdirs()
}

// 定义生成Java 项目目录的任务
task createJavaProjectDir << {
    def dirList = ['src/main/java','src/main/resources','src/test/java','src/test/resources']
    dirList.each {fileName  ->  createDir(fileName)}
}

// 定义生成 Web 项目目录的任务
task createWebProjectDir (dependsOn: createJavaProjectDir) << {
    def fileName = 'src/main/webapp'
    createDir(fileName)
}

実際には、Javaコンポーネントは、以前に定義されており、我々は唯一の直接ラインで呼び出す必要があります。

task createDirs << {
    sourceSets*.java.srcDirs*.each{
        it.mkdirs()
    }
    sourceSets*.resources.srcDirs*.each{
        it.mkdirs()
    }
}

これらは、ミッションとのGradleのタスクで導入プラクティスです。

転載リンク:https://www.jianshu.com/p/e0a0c40f3e14

おすすめ

転載: blog.csdn.net/weixin_33719619/article/details/91014756