gradle学习笔记(1)
1. 安装
(1) 下载最新gradle压缩包,解压到某处。地址是:Gradle web site;
(2) 添加环境变量:
1) 变量名:GRADLE_HOME
变量值:刚才解压的地址,如:E:\gradle-2.8。
2) 为Path变量添加一个值:GRADLE_HOME/bin
3) 测试。在命令行里输入gradle -v,若显示一些gradle信息,说明安装成功。
2. Hello World
gradle中的一切都基于两个概念:project和task;
每次gradle build都是组装一个或多个project。project可能是一个library JAR,也可能是一个web应用,它还能是一个配置(不一定能被Build);
每一个project由一个或多个task组成
例1:
build.gradle
task hello {
doLast {
println 'Hello world!'
}
}
现在你能在命令行中进入该文件所在目录,然后输入命令gradle -q hello 去执行hello任务,你将会在命令行中看到Hello World!。
它的执行过程是当你执行gradle命令时,gradle会在当前目录下寻找build.gradle文件。
build.gradle也被称为build script。另外,命令中-q的意思是不要输出gradle的一些日志信息。
还有一种更简便的task的写法:
task hello << {
println 'Hello world!'
}
在build脚本中还可以使用Groovy语句。
例2:
task upper << {
String someString = 'mY_nAmE'
println "Original: " + someString
println "Upper case: " + someString.toUpperCase()
}
同样,执行命令gradle -q upper,将输出:Original:hElLo wOrLd !(换行)Upper case:HELLO WORLD !
例3:
task count << {
4.times { print "$it " }
}
输出:0 1 2 3。注意:$it 是被双引号包含。
task hello << {
print 'Hello world,'
} task intro(dependsOn: hello) << {
print "I'm Gradle!"
}
输出:Hello world,I'm Gradle!
另外,若想实现Lazy dependsOn(懒依赖),即把依赖任务写到被依赖任务的前面,例如上面想要将intro任务写到hello任务的前面,需要将intro任务中的dependsOn: hello中的hello打上单引号,否则会报Could not find property 'hello' on root project 'test'.错误,即:
task intro(dependsOn: 'hello') << {
println "I'm Gradle!"
} task hello << {
print 'Hello world,'
}
例4:
4.times { counter ->
task "task$counter" << {
println "I'm task number $counter"
}
}
task0.dependsOn task2, task3
执行命令gradle -q task0,输出:
I'm task number 2
I'm task number 3
I'm task number 0
为一个存在的任务添加行为,如下:
例5:
task hello << {
println 'Hello Earth'
}
hello.doFirst {
println 'Hello Venus'
}
hello.doLast {
println 'Hello Mars'
}
hello << {
println 'Hello Jupiter'
}
输出:
Hello Venus
Hello Earth
Hello Mars
Hello Jupiter
例6:
task myTask {
ext.myProperty = "myValue"
} task printTaskProperties << {
println myTask.myProperty
}
输出:myValue
例7:
task loadfile << {
def files = file('你要遍历的路径,可以是相对路径,也可以是绝对路径(注意路径中的斜杠,要么写一个正斜杠,要么写两个反斜杠)').listFiles().sort()
files.each { File file ->
if (file.isFile()) {
ant.loadfile(srcFile: file, property: file.name)
println " *** $file.name ***"
println "${ant.properties[file.name]}"
}
}
}
为了增强代码的灵活性与重用性,可以将一些代码抽取成一个方法,如:
例8:
defaultTasks 'clean', 'run' task clean << {
println 'Default Cleaning!'
} task run << {
println 'Default Running!'
} task other << {
println "I'm not a default task!"
}
输出:
Default Cleaning!
Default Running!
例9:
task distribution << {
println "We build the zip with version=$version"
} task release(dependsOn: 'distribution') << {
println 'We release now'
} gradle.taskGraph.whenReady {taskGraph ->
if (taskGraph.hasTask(release)) {
version = '1.0'
} else {
version = '1.0-SNAPSHOT'
}
}
执行gradle -q distribution
输出:We build the zip with version=1.0-SNAPSHOT
执行gradle -q release 输出:
We build the zip with version=1.0
We release now
gradle学习笔记(1)的更多相关文章
- gradle学习笔记
一直想着花时间学习下gradle,今天有空.入门一下.参考:极客学院gradle使用指南,官方文档:gradle-2.12/docs/userguide/installation.html,以及百度阅 ...
- Gradle学习笔记之Groovy
[TOC] Gradle 的核心功能是由Java实现. 在这些功能之上, 有一个使用动态编程语言Groovy编写的领域特定语言(DSL). Gradle的构建脚本build.gradle和settin ...
- Android Gradle 学习笔记(五):Gradle 任务 Task
在之前的学习中,我们了解到Gradle的构建工作都是由Task组合完成的.本节我们就来介绍一下 Task - 任务. 一.多种方式创建任务 在Gradle中,我们可以有很多种方式来创建任务.为什么有这 ...
- Android Gradle 学习笔记(四):Gradle 构建脚本
本节我们从整体的角度来介绍一下Gradle. 一.setting.gradle 在Gradle中,定义了一个设置文件,用于初始化以及工程树的配置.设置文件的默认的名字就是setting.gradle, ...
- Android Gradle 学习笔记(一):Gradle 入门
官网地址:https://gradle.org/. 一.配置 Gradle 环境 安装Gradle之前必须要配置好Java环境,要求JDK 6 以上,并且在环境变量配置好JAVA_HOME.查看Jav ...
- Gradle学习笔记(1)创建简单的Java项目
Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建工具.它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置.当前 ...
- Android Gradle 学习笔记(六):Gradle 插件
Gradle 本身提供了一些基本的概念和整体核心的框架,其他用于描述真实使用场景的都可以通过插件扩展的方式来实现.这样就可以通过抽象的方式提供一个核心的框架,其他具体的功能和业务都通过插件扩展的方式来 ...
- Android Gradle 学习笔记(七):Android Gradle 插件
我们知道Android Gradle其实就是一个Gradle的一个第三方插件,它是由Google的Android团队开发的,基于Gradle构建的,和Android Studio完美搭配.相比于旧的构 ...
- Android Gradle 学习笔记(三):Gradle 日志
在第一节,我们使用到了gradle -q hello命令行来运行Hello World,并对Hello World进行了简单的分析,了解到 gradle -q hello 的意思是要执行的build. ...
随机推荐
- SQL Server 无法连接到服务器。SQL Server 复制需要有实际的服务器名称才能连接到服务器。请指定实际的服务器名称。
异常处理汇总-数据库系列 http://www.cnblogs.com/dunitian/p/4522990.html SQL性能优化汇总篇:http://www.cnblogs.com/dunit ...
- WPF 微信 MVVM
公司的同事离职了,接下来的日子可能会忙碌,能完善DEMO的时间也会少了,因此,把做的简易DEMO整体先记录一下,等后续不断的完善. 参考两位大神的日志:WEB版微信协议部分功能分析.[完全开源]微信客 ...
- Git命令总结
本文转载自345大神.... 查看原文 先上个图形化界面GIT工具 SourceTree下载链接 windows版 1.8.3 & Mac版 2.2.4 链接: http://pan.baid ...
- Go结构体实现类似成员函数机制
Go语言结构体成员能否是函数,从而实现类似类的成员函数的机制呢?答案是肯定的. package main import "fmt" type stru struct { testf ...
- IIC驱动移植在linux3.14.78上的实现和在linux2.6.29上实现对比(deep dive)
首先说明下为什么写这篇文章,网上有许多博客也是介绍I2C驱动在linux上移植的实现,但是笔者认为他们相当一部分没有分清所写的驱动时的驱动模型,是基于device tree, 还是基于传统的Platf ...
- Asp.net Core 初探(发布和部署Linux)
前言 俗话说三天不学习,赶不上刘少奇.Asp.net Core更新这么长时间一直观望,周末帝都小雨,宅在家看了下Core Web App,顺便搭建了个HelloWorld环境来尝尝鲜,第一次看到.Ne ...
- bzoj4724--数论
题目大意: B进制数,每个数字i(i=0,1,...,B-1)有a[i]个.你要用这些数字组成一个最大的B进制数X(不能有前导零,不需要 用完所有数字),使得X是B-1的倍数.q次询问,每次询问X在B ...
- BPM配置故事之案例12-触发另外流程
还记得阿海么,对就是之前的那个采购员,他又有了些意见. 阿海:小明,你看现在的流程让大家都这么方便,能不能帮个忙让我也轻松点啊-- 小明:--你有什么麻烦,现在不是已经各个部门自己提交申请了嘛? 阿海 ...
- iOS之ProtocolBuffer搭建和示例demo
这次搭建iOS的ProtocolBuffer编译器和把*.proto源文件编译成*.pbobjc.h 和 *.pbobjc.m文件时,碰到不少问题! 搭建pb编译器到时没有什么问题,只是在把*.pro ...
- Oozie分布式任务的工作流——Spark篇
Spark是现在应用最广泛的分布式计算框架,oozie支持在它的调度中执行spark.在我的日常工作中,一部分工作就是基于oozie维护好每天的spark离线任务,合理的设计工作流并分配适合的参数对于 ...