Gradle(1)

作者: Luna_Lu | 来源:发表于2016-12-17 22:58 被阅读0次

    Gradle是个好东西,然而要用它要求有点高。
    我还是先从HelloWorld学起。

    安装

    mac上安装很简单,用sdkman即可。

    (没有sdkman的可以先安装)

     curl -s https://get.sdkman.io | bash
    
    sdk install gradle 3.2.1
    

    这么安装貌似啥也不用配。

    安装完之后,国际惯例。

    gradle -v
    

    检查是否安装成功

    Hello World

    gradle命令会在当前目录找一个build.gradle文件。
    于是。来一个build.gradle

    task hello {
      doLast {
        print "Hello World";
      }
    }
    

    执行gradle -q hello
    输出 Hello World

    (这个命令中的q是代表quiet模式,屏蔽一些日志的输出。只输出代码中要求输出的。)

    这里发生了啥呢?
    这个构建脚本定义了一个task,名字是hello.并且加入了一个action。
    运行gradle hello时,会执行这个task,也就执行了这个action.
    这个action是一个包含了一些Groovy代码的闭包。(闭包这个概念。。。😌,我啥时候才能弄明白)

    记不清这是第几个HelloWorld了,也不知道未来还有多少个HelloWorld。在码农这条道路上越走越远了。

    More than helloWorld

    既然是用到了Groovy,那也试试Groovy的语法好了。

    task upper << {
        print "Hello World".toUpperCase()
        4.times {print "$it"}
    }
    

    <<是doLast的一种替代,guide中都是这么用的,比较方便。然而,在执行gradle upper时,出现了warning:

    The Task.leftShift(Closure) method has been deprecated and is scheduled to be removed in Gradle 5.0. Please use Task.doLast(Action) instead.
            at build_3zqc02fou2be1vy7eylxf95tp.run(/Users/lulei/gradleLearning/build.gradle:1)
    

    任务之间的依赖

    任务之间可能会存在一定的依赖关系
    build.gradle

    task hello << {
      print "Hello World"
    }
    task intro(dependsOn: hello) << {
      print "I'm Gradle"
    }
    
    > 输出
    [luleideMacBook-Pro:gradleLearning lulei$ gradle intro
    :hello
    Hello World:intro
    I'm Gradle
    BUILD SUCCESSFUL
    

    依赖之间的顺序不重要
    build.gradle

    task taskX(dependsOn: 'taskY') << {
        println 'taskX'
    }
    task taskY << {
        println 'taskY'
    }
    

    taskX依赖于taskY, 但是taskY却在之后定义,build依然能够正常运行。

    动态任务

    利用Groovy,我们不仅可以定义task,同时,我们还可以动态地生成任务。
    build.gradle

    4.times { counter ->
        task "task$counter" << {
          println "I'm counter $counter"
        }
    }
    
    task0.dependsOn task1
    
    task0.doFirst {
        println "doFirst"
    }
    

    上面的程序动态地创建了task0, task1, task2, task3
    可以通过

    gradle taks0
    

    执行任务task0
    同时还可以看到,上面的程序中有 task0.dependsOn task1,可以通过这个来添加额外的依赖。
    同时,还可以给已存在的task加行为。(task0.doFirst{})

    shortcut notation

    每个任务都可以通过短标记$来访问。

    task0.doFirst {
      println "$task0.name"
    }
    

    相关文章

      网友评论

          本文标题:Gradle(1)

          本文链接:https://www.haomeiwen.com/subject/xvdamttx.html