三: Gradle中的script

我们知道build.gradle是子项目的编译脚本,一个script,也是我们最关心的内容,来看看长什么样:

plugins {
    // Apply the application plugin to add support for building a CLI application in Java.
    id 'application'
}

repositories {
    // Use Maven Central for resolving dependencies.
    mavenCentral()
}

dependencies {
    // Use JUnit test framework.
    testImplementation 'junit:junit:4.13.2'

    // This dependency is used by the application.
    implementation 'com.google.guava:guava:30.1.1-jre'
}

application {
    // Define the main class for the application.
    mainClass = 'mypackage.App'
}

Gradle中的各种配置,都采用script脚本,我们先了解下script基本信息

script和instance

Gradle中一共有三种Script。分别对应不同的instance

Type of scriptDelegates to instance of存在形式
Build scriptProject项目中的build.gradle文件
Init scriptGradle1. Gradle启动时通过命令行参数-I or –init-script,指定的script脚本
2. USER_HOME/.gradle/init.gradle文件
3. USER_HOME/.gradle/init.d/*.gradle文件
4. GRADLE_HOME/init.d/*.gradle文件
Settings scriptSettings项目中的settings.gradle文件

所谓instance,是Gradle内部工作的一个实例。当我们在配置script的时候,其实是在配置该Instance的属性。Gradle会利用Instance来执行实际的工作。

比如说我们配置Build Script,也就是上面的build.gradle,那么Gradle在启动的时候,就会根据我们的配置,创建一个Project instance。然后运行instance执行build工作

如果想了解具体某个script可以配置什么内容,就得去看对应Instance的属性值。

script和代码

可能你都没意识到,在你配置脚本的时候,你其实是在写代码

Gradle中script的编写语言,是一种正儿八经的编程语言,叫做Groovy,另一种可用的语言,是Kotlin。你可以这样写的:

tasks.register('upper') {
    doLast {
        String someString = 'mY_nAmE'
        println "Original: $someString"
        println "Upper case: ${someString.toUpperCase()}"
    }
}

示例中出现了变量,赋值,以及函数调用,你必须得相信他们是真正的代码,而不是一般的配置。

所有的script,都必须实现Script接口,也就说,你写script的时候,其实在写一个实现类

Script中的语句,常规的很好理解:

        String someString = 'mY_nAmE'
        println "Original: $someString"
        println "Upper case: ${someString.toUpperCase()}"

比较怪异点的是叫做script block的东西,也就是大括号包围起来这个:

tasks.register('upper') {
   
}

一个script block其实就是一个函数,大括号里面的一大坨东西,是函数要执行的指令,是一个闭包形式。如果你不懂闭包,就直接理解为这些指令被打包在一起,作为参数传递给函数,函数调用时会执行这些指令

这里调用了tasks.register函数:

tasks.register('upper') {
   闭包参数
}

回到我们的例子:

tasks.register('upper') {
    doLast {
        String someString = 'mY_nAmE'
        println "Original: $someString"
        println "Upper case: ${someString.toUpperCase()}"
    }
}

翻译一下就是:

  • 调用tasks.register函数
  • task.register运行时,调用doLast函数
  • doLast运行时,执行对应三条指令

script总结

当你在写一个script的时候,你正儿八经的在写代码,其实在写一个类,这个类实现了Script接口,写这个类的目的,是为了配置对应instance的属性

Ref



《 “三: Gradle中的script” 》 有 3 条评论

  1. how to get generic cytotec As outlined by Tubarro et al 94, the aim of investigations for LUTS should be threefold 1 to evaluate the possible relationship between prostatic enlargement, lower urinary tract symptoms and signs of bladder outlet obstruction; 2 to quantify the severity of benign prostatic enlargement related symptoms and signs and 3 to rule out the presence of a prostate cancer

  2. Nine studies 7, 10, 25, 26, 28, 29, 34, 44, 45 reported ongoing pregnancy rates n 2277, which were similar in both groups 29 dapoxetina generico West for my face and neck lift, and eyelid surgery

回复 can i purchase cheap cytotec prices 取消回复

您的邮箱地址不会被公开。 必填项已用 * 标注

About Me

一位程序员,会弹吉他,喜欢读诗。
有一颗感恩的心,一位美丽的妻子,两个可爱的女儿
mail: geraldlee0825@gmail.com
github: https://github.com/lisuxiaoqi
medium: https://medium.com/@geraldlee0825