一个简单的Gradle脚本文件

news/2024/5/20 1:39:25 标签: gradle

  通过一个简单的Gradle脚本文件理解其主要语法:

// build.gradle 文件
// 建议运行在JDK1.8下,Gradle5.0将不再支持JDK1.7的运行
// Support for running Gradle using Java 7 has been deprecated and is scheduled to be removed in Gradle 5.0.

// 定义 helloword 任务
// 命令行终端执行 gradle -q helloword 输出 Hello world!
// 选项 -q 表示 --quiet
task helloword {
    // doLast 语句
    doLast {
        println 'Hello world!'
    }       
}

// 可以指定一个快捷键(<<符号表示)到 doLast 语句来简化 helloword 任务
// 但不建议这么使用,因为<<将在Gradle5.0中删除
// The Task.leftShift(Closure) method has been deprecated and is scheduled to be removed in Gradle 5.0. Please use Task.doLast(Action) instead.
task hellowordLeftShift << {
    println 'Hello world!';
}

// Gradle 构建脚本使用 Groovy API
task upper {
    doLast {
        String expString = 'Yiibai gradle totorials'
        println "Original: " + expString
        println "Upper case: " + expString.toUpperCase()
    }
}

// 4次打印隐式参数($it)的值
task count {
    doLast{
        4.times {
            print "$it"
        }
    }
}

// Groovy的JDK方法
// Groovy增加了很多有用的方法到标准的Java类。例如,从Java API可迭代实现它遍历Iterable接口的元素的 each() 方法。
task groovyJDKMethod {
    doLast {
        String myName = "Yiibai";
        myName.each(){
            println "${it}"
        };
    }
}

task hello

// 定位任务
// 如果要查找在构建文件中定义的任务,则必须使用相应的标准项目属性。这意味着每个任务都可以作为项目的属性,使用任务名称作为属性名称。
println tasks.hello.name
println tasks['hello'].name

// 任务依赖关系
task intro(dependsOn: 'helloword'){
    doLast{
        println "I'm gradle"
    }
}

task taskX(dependsOn: 'taskY'){
    doLast{
        println "taskX"
    }
}

task taskY{
    doLast{
        println 'taskY'
    }
}

task task1 << {
    println 'compiling source #1'
}

task task2(dependsOn: task1) << {
    println 'compiling unit tests #2'
}

task task3(dependsOn: [task1, task2]) << {
    println 'running unit tests #3'
}

task task4(dependsOn: [task1, task3]) << {
    println 'building the distribution #4'
}

// 另一种方法来添加任务依赖,它就是通过使用闭包。
task taskXLib {
    doLast{
        println 'taskXLib'
    }
}

taskXLib.dependsOn{
    tasks.findAll{
        task -> task.name.startsWith('lib')
    }
}

task lib1 {
    doLast{
        println 'lib1'
    }
}

task lib2 {
    doLast {
        println 'lib2'
    }
}

task notALib {
    doLast {
        println 'notALib' 
    }
}

// 向任务添加描述
// 使用 description 关键字可以向任务添加描述,执行Gradle任务时会显示此描述。
// 执行任务一个task都会显示,不只是copy
task copy(type: Copy){
    description 'Copies the resource directory to the target directory.'
    from 'resource'
    into 'target'
    include('**/*.txt', '**/*.xml', '**/*.properties')
    println('description applied')
}

// 跳过任务
// 如果用于跳过任务的逻辑不能用谓词表示,则可以使用 StopExecutionException 。如果操作抛出此异常,则会跨过此操作的进一步执行以及此任务的后续操作的执行。
task compile {
    doLast{
        println 'We are doing the compile.'
    }
}

compile.doFirst{
    // Here you would put arbitrary conditions in real life.
    // But this is used in an integration test so we want defined behavior.
    if(true){ throw new StopExecutionException() }
}

task myTask(dependsOn: 'compile'){
    doLast{
        println 'I am not affected'
    }
}

// 插件
/*
* Gradle中有两种类型的插件:脚本插件和二进制插件。
* 脚本插件是一个额外的构建脚本,它提供了一种声明性方法来操作构建,通常在构建中使用。
* 二进制插件是实现插件接口并采用编程方法来操作构建的类。二进制插件可以驻留在插件JAR中的一个构建脚本和项目层次结构或外部。
* */
apply plugin: 'java'

repositories{
    mavenCentral()
}

// 编写自定义插件
// 一个简单的hello插件
apply plugin: HelloPlugin

class HelloPlugin implements Plugin<Project> {
    void apply(Project project){
        project.task('hello') {
            doLast {
                println "Hello from the HelloPlugin."
            }
        }
    }
}

// 依赖
/*
* 声明依赖关系
* Gradle遵循一些特殊语法来定义依赖关系。
* 以下脚本定义了两个依赖项,一个是Hibernate core 3.6.7,第二个是Junit 4.0和更高版本。
* 如下面的代码所示,可在build.gradle文件中使用此代码。
* */
dependencies{
    compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.7.Final'
    testCompile group: 'junit', name: 'junit', version: '4.+'
}


http://www.niftyadmin.cn/n/823598.html

相关文章

内核符号表System.map

System.map是一个特定内核的内核符号表。它是你当前运行的内核的System.map的链接。 内核符号表是怎么创建的呢? System.map是由“nm vmlinux”产生并且不相关的符号被滤出。对于本文中的例子&#xff0c;编译内核时&#xff0c;System.map创建在/usr/src/linux-2.4/System.ma…

Spark MLlib知识点学习整理

MLlib的设计原理:把数据以RDD的形式表示&#xff0c;然后在分布式数据集上调用各种算法。MLlib就是RDD上一系列可供调用的函数的集合。 操作步骤: 1、用字符串RDD来表示信息。 2、运行MLlib中的一个特征提取算法来吧文本数据转换为数值的特征。给操作会返回一个向量RDD。 3、对…

Gradle仓库

转自&#xff1a;https://docs.gradle.org/4.4.1/userguide/dependency_management.html#sec:repositories 25.6. Repositories Gradle repository management, based on Apache Ivy, gives you a lot of freedom regarding repository layout and retrieval policies. Additi…

linux性能调优工具perf

perf学习-linux自带性能分析工具什么是perf?linux性能调优工具&#xff0c;32内核以上自带的工具&#xff0c;软件性能分析。在2.6.31及后续版本的Linux内核里&#xff0c;安装perf非常的容易。几乎能够处理所有与性能相关的事件。什么是性能事件&#xff1f;指在处理器或者操…

测试插件maven-surefire-plugin

1. 配置 1.1 参考&#xff1a;http://maven.apache.org/surefire/maven-surefire-plugin/ 1.2 配置&#xff1a; <!-- The Surefire Plugin is used during the test phase of the build lifecycle to execute the unit tests of an application. --><plugin><…

从零到百亿互联网金融架构发展史

回想起从公司成立敲出的第一行代码算起到现在也快三年了&#xff0c;平台的技术架构&#xff0c;技术体系也算是经历了四次比较重大的升级转化&#xff08;目前第四代架构体系正在进行中&#xff09;&#xff0c;临近年底也想抽出时间来回顾一下&#xff0c;一个小公司从最开始…

linux下X86架构IDT解析

一、中断描述符表IDT 1.中断描述符表IDT是一个系统表&#xff0c;它与每一个中断或异常向量相联系&#xff0c;每一个向量在表中有相应的中断或异常处理程序的入口地址。内核在允许中断发生前&#xff0c;必须适当的初始化IDT. 2.IDTR寄存器可以使IDT位于内存的任何地方&#x…

UVA 562(01背包)

http://uva.onlinejudge.org/index.php?optioncom_onlinejudge&Itemid8&category114&pageshow_problem&problem503 以sum/2为背包总量&#xff0c;结果为sum-d*dp[V] #include <iostream> #include <string> #include <cstring> #include &…