Gradle学习基础(3):build脚本基础知识

简介: Gradle学习基础(3):build脚本基础知识

1.Project和Task


在Gradle中,所有内容都是基于这两个概念:Projects和Tasks。


    每个gradle的构建是由一个或多个project组成。一个project表示你希望Gradle为你做的一件事情。比如,打包jar文件或者web应用(war),或者是压缩为ZIP文件等等。


   每个项目由一个或多个Task组成。一个Task表示构建过程中一个基本的细化工作。比如编译类、创建Jar文件、生成Javadoc等等。


接下来我们看看如何在一个Project中定义一些简单的Task。



2.Hello World


我们通过命令行来运行Gradle。在命令行中输入gradle命令会调用当前目录里面的build.gradle。我们将这个build.gradle称为构建脚本(build script),严格来讲,应该称为构建配置脚本。


   第一个构建脚本:


   build.gradle:


        task hello {
            doLast {
                println 'Hello World!'
            }
         }


在控制台输入命令:gradle -q hello   即可运行名为hello的task。参数-q是表示只显示task的输出。

20160120144624086.png


下面解释一下脚本内容,首先,task hello 定义一个叫hello的Task。doLast 表示在该Task执行完成后去执行doLast里面的脚本即:println 'Hello World!'



3.快捷的Task定义


     有一种比上面更加快捷方便的Task定义方法,如下:

build.gradle:

   task hello << {
       println 'Hello World!'
   } 


这种定义方式跟第2节的doLast表示的是一模一样的意思,二者可以替换。



4.构建脚本代码


build脚本中,主要用到Groovy代码。在Task内部,运行的代码为Groovy代码,对Groovy不熟的同学可以先去了解一下Groovy。


   在任务中使用Groovy示例如下:


  build.gradle:

task upper << {
    String someString = 'mY_nAmE'
    println "Original: " + someString 
    println "Upper case: " + someString.toUpperCase()
}


运行结果如下:

20160120150312015.png


我们再看一个使用Groovy循环的例子

task count << {
    4.times { print "$it " }
}


5.Task依赖


考虑这么一种情况,其中一个Task的运行必须在另一个Task之后。也就是Task1的运行必须依赖于Task2。接下来我们学习如何去实现这个目的。


     代码如下:

task hello << {
    println 'Hello world!'
}
task intro(dependsOn: hello) << {
    println "I'm Gradle"
}

 运行结果如下:

20160120151018837.png


从运行结果可以看出,在运行intro之前会运行hello。添加依赖时,并不需要被依赖的Task提前声明。比如下面的脚本是可以正常执行的。

<span style="font-size:18px;">task taskX(dependsOn: 'taskY') << {
    println 'taskX'
}
task taskY << {
    println 'taskY'
}</span>



6.动态创建任务


使用Groovy可以动态生成多个Task,如下:

4.times { counter ->
    task "task$counter" << {
        println "I'm task number $counter"
    }
}

上面创建了4个Task,分别为task1,task2,task3,task4,运行task1,如下:


20160120151924415.png




7.同时操作多个Task


   一旦Task被创建,那么他们就可以通过API来访问,比如,你可以在运行时动态依赖。

4.times { counter ->
    task "task$counter" << {
        println "I'm task number $counter"
    }
}
task0.dependsOn task2, task3

运行结果如下:

20160120152345089.png

你也可以给已有的Task添加行为(Task执行之前、之后等等)


<span style="font-size:18px;">task hello << {
    println 'Hello Earth'
}
hello.doFirst {
    println 'Hello Venus'
}
hello.doLast {
    println 'Hello Mars'
}
hello << {
    println 'Hello Jupiter'
}</span>

运行结果如下:20160120152758169.png


doFirst是在hello执行之前执行,doLast是在hello执行之后执行。<<与doLast是等价的,doLast按照顺序先后执行。



8.引用Task的名称


  在Task执行时,可以获取指定Task的名称,如下所示:

<span style="font-size:18px;">task hello << {
    println 'Hello world!'
}
hello.doLast {
    println "Greetings from the $hello.name task."
}</span>

运行结果如下:

20160120153520422.png



9.外部属性


   你可以给Task添加自定义的属性。在添加属性时需要给定一个初始值。如下所示:

task myTask {
    ext.myProperty = "myValue"
}
task printTaskProperties << {
    println myTask.myProperty
}


运行结果如下:

20160120153957595.png




10.默认Task


   你可以给Gradle设置一个默认的Task,这样,如果没有指定运行那个Task,这会运行默认的Task。

defaultTasks 'clean', 'run'
task clean << {
    println 'Default Cleaning!'
}
task run << {
    println 'Default Running!'
}
task other << {
    println "I'm not a default task!"
}


    运行如下:


20160120154247677.png


好了,Gradle的基础就先讲这么多,个人觉得Groovy还是需要去稍微学习一下,毕竟Task里面一般是调用Groovy的函数,完全不懂Groovy的话没办法编写Task



相关文章
|
存储 缓存 Java
《Gradle构建脚本的基本结构和语法》
《Gradle构建脚本的基本结构和语法》
144 0
|
缓存 druid 前端开发
Gradle学习笔札
自学Gradle后的笔记
548 0
Gradle学习笔札
|
4月前
|
Android开发
[ionic]解决Could not read build file capacitor/build.gradle as it does notexist.
[ionic]解决Could not read build file capacitor/build.gradle as it does notexist.
43 1
|
5月前
|
Java
graphql dgs springboot gradle学习
https://dgraphql dgs springboot gradle学习
|
6月前
|
Android开发
Android Gradle开发—脚本实现自动打包后复制一份APK文件,并修改APK名称,到指定目录作备份
Android Gradle开发—脚本实现自动打包后复制一份APK文件,并修改APK名称,到指定目录作备份
356 0
|
Java 测试技术 Scala
[√]groovy / gradle学习
[√]groovy / gradle学习
66 0
|
XML Java Maven
Gradle学习集合整合
Gradle学习集合整合
66 0
|
IDE Java API
Gradle | 全局配置、Log开关控制、Build Variant、meta-data等配置
Gradle是一个先进的构建系统,也是一个允许通过插件创建自定义构建逻辑先进的构建工具。
500 0
Gradle学习基础(1):搭建Gradle环境
Gradle学习基础(1):搭建Gradle环境
Gradle学习基础(1):搭建Gradle环境
|
Android开发
Migrate Project to Gradle? This project does not use the Gradle build system
Migrate Project to Gradle? This project does not use the Gradle build system
107 0