Gradle

目录

1. 项目构建工具

1.1.ant

1.2.maven

1.3. gradle

2. 安装配置

3. 构建脚本

3.1 练习

3.2 build过程

4. gradle任务

4.1 任务依赖

4.1.1. 在声明时指定依赖关系

4.1.2. 在声明时不指定,声明完之后单独声明依赖关系

4.1.3. 闭包实现依赖

4.2 定位任务

4.3 任务描述

4.4 任务跳过

5. 依赖管理

6. 插件

6.1 插件类型

6.2 插件使用

6.3 脚本插件

6.4 ***二进制插件(对象插件)

6.4.1 内部插件

6.4.2 第三方插件

6.5 编写自定义插件

6.6 自定义插件扩展

6.7 标准gradle插件


1. 项目构建工具

1.1.ant

  2000年推出,基于ivy, tomcat使用ant构建项目

1.2.maven

2004年推出,基于repository

1.3. gradle

2012年发布,ant和maven都是基于xml文件的,gradle不再依赖于xml,更加的灵活,基于groovy语言。兼容ivy或maven仓库

 

2. 安装配置

2.1 官网下载安装包:https://gradle.org/

2.2 解压

2.3 配置环境变量

2.4 cmd中执行gradle -v看是否安装配置成功

 

3. 构建脚本

gradle用于构建项目或者任务,一个项目由不同的任务组成,一个任务只是构建项目中的一块内容,任务可能是编译一些类,创建一个jar...

3.1 练习

task firstgvy {
    doLast {
        println "this is the first gradle";  //this is the first gradle
    }
}

(1) 文件命名为build.gradle

(2)task是关键字

(3)在当前目录下执行:gradle -q firstgvy,就可以执行doLast中编写的方法,没有指定文件时,gradle默认会找当前目录下的build.gradle文件,然后执行对应名称的task

task uppergvy {
	doLast {
		String name = "zhangsan";
		println name; //zhangsan
		println name.toUpperCase(); //ZHANGSAN
	}
}

task printgvy { //0 1 2 3
	doLast {
		4.times {
			print "$it "
		}
		println ""
	}
}

 

3.2 build过程

    gradle构建过程包含三个阶段:initialization, configuration, execution。

    (1)initialization:gradle支持单个或者多个工程的构建。在initialization阶段,gradle决定哪些工程将参与到当前的构建过程,并为每一个这样的工程创建一个Product实例。一般情况下,参与构建的工程信息将在settings.gradle中定义。

    (2)configuration:在这一阶段,配置Project的实例,所有工程的构建脚本将在这里被执行。Task,configuration和许多其他的对象将创建的配置。

    (3)execution:在之前的configuration阶段,task的一个子集被创建并配置。这些子集来自于作为 参数传入gradle命令的task名字,在execution阶段,这一子集将被依次执行。

task secondgvy {
    doLast {
        println "this is the second gradle";
    }
}

task firstgvy {    
    println "this is the first gradle";    
}

1. 执行gradle -q firstgvy,打印this is the first gradle

2. 执行gradle -q secondgvy,打印如下:

this is the first gradle
this is the second gradle

    (1)doLast内的task在第三阶段exection执行,该部分脚本只有在执行task名称的情况下才会执行

    (2)doLast外的task在第二阶段configuration执行,该部分的脚本,以及没有放在task内的脚本,可以在不指定task的情况下执行

 

4. gradle任务

4.1 任务依赖

4.1.1. 在声明时指定依赖关系

task parentgvy {
	doLast {
		println "hello parent";
	}
}

task dependentgvy (dependsOn:parentgvy){
	doLast {
		println "i am dependent";
	}
}

执行gradle -q dependentgvy,显示如下:

hello parent

i am dependent

4.1.2. 在声明时不指定,声明完之后单独声明依赖关系

task parentgvy {
	doLast {
		println "hello parent";
	}
}

task dependentgvy {
	doLast {
		println "i am dependent";
	}
}
dependentgvy.dependsOn parentgvy

4.1.3. 闭包实现依赖

task taskX {
	doLast {
		println 'taskX';
	}
}

taskX.dependsOn {
	tasks.findAll {
		task -> task.name.contains('lib');
	}
}

task lib1 {
	doLast {
		println 'lib1';
	}
}

task lib2 {
	doLast {
		println 'lib2';
	}
}

task notALib {
	doLast {
		println "notALib";
	}
}

    执行: gradle -q taskX,打印如下:

lib1
lib2
taskX

任务依赖不能出现循环依赖!

 

4.2 定位任务

    每个任务都可以作为项目的属性,使用任务名称作为属性名称。也可以使用tasks集合来使用对应的属性

task test

println test.name
println project.test.name
println tasks['test'].name

4.3 任务描述

task copy(type : Copy) {
	description "copy resource to target"
	from "resource"
	into "target"
	include("**.*.txt", "**/*.xml")
	println "description applied"
}

只会执行最后一句打印脚本,其他内容只是方便阅读使用。

4.4 任务跳过

task compile {
	doLast {
		println "do compile"
	}
}

compile.doFirst {
	if(true) throw new StopExecutionException()
}

task myTask(dependsOn : compile){
	doLast {
		println "myTask"
	}
}

    执行后只打印了myTask

 

5. 依赖管理

 

 

6. 插件

6.1 插件类型

脚本插件和二进制插件

脚本插件是一个额外的构建脚本,它提供了一种声明性方法来操作构建,通常在构建中使用;

二进制插件是实现插件接口并采用编程方法来操作构建,可以驻留在插件jar中的一个构建脚本和项目层次结构或者外部。

6.2 插件使用

Project.apply()方法用于特定的插件,可以多次使用相同插件

6.3 脚本插件

脚本插件可以从本地文件系统进行使用,文件系统位置相对于项目目录,而远程脚本位置指定HTTP URL

1. 构建other.gradle插件

ext {
    verson = '1.0'
    url = 'http://maven.cn'
}

2. 在build.gradle脚本中使用other.gradle插件

apply from: 'other.gradle'

task test {
    doLast {
        println "version: $verson"
        println "url: $url"
    }
}

3. 执行脚本:gradle -q test

version: 1.0
url: http://maven.cn

6.4 ***二进制插件(对象插件)

每个插件由插件标识,一些核心插件是使用短名称来应用它,一些社区插件是使用插件ID的完全限定名称,有时它允许指定一个插件类,二进制插件就是 实现了org.gradle.api.Plugin接口的插件,它们可以 用PluginId。

通常分成两类:内部插件和第三方插件

6.4.1 内部插件

gradle内部 自己实现的插件。

有以下方式使用插件:

(1)使用短名称

apply plugin:JavaPlugin

(2)使用plugin dsl

plugins {
    id 'java'
}

    如果是社区插件,还需要指定版本号

plugins {
    id "com.test.bintary" version "1.0.0"
}

 

6.4.2 第三方插件

第三方的对象插件通常是jar包,要想让构建脚本知道第三方插件的存在,需要 使用buildscript来设置。

buildscript {
    repositories {
        maven {
            url "https://plugins.gradle.org/m2/"
        }
    }
    dependencies {
        classpath "com.jfrog.bintray.gradle-bintray-plugin:1.8.4"
    }
}
apply plugin: "com.jfrog.bintary"

6.5 编写自定义插件

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

执行命令:gradle -q hello

打印:hello from the HelloPlugin.

6.6 自定义插件扩展

class HelloPlugin implements Plugin<Project> {
    void apply(Project project){
        project.extensions.create("greeting", HelloPluginExtension)

        project.task('hello') {
            doLast {
                println project.greeting.message
            }
        }
    }
}

class HelloPluginExtension{
    String message
}

apply plugin: HelloPlugin 
greeting.message=" hello"

6.7 标准gradle插件

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值