gradle全局抽象概念理解
gradle语言层组成:
1、gradle是基于DSL(领域特定语言)的自动化构建工具,这表明gradle并非一种通用的编程语言,只是服务于解决软件工程自动化构建领域的特定语言。
2、gradle是以groove语言为基础。groove语言被称为更好的java语言,是一种动态语言,可以与spring无缝集成。既然Gradle核心是Groovy,Groovy本质又是Java,所以很明显可以发现Gradle环境必须依赖JDK与Groovy库。groove语言知识了解groove脚本基础全攻略
gradle领域组成 : project和task、action
Gradle里面的任何东西都是基于Project和Task这两个概念,基于这两个概念,Gradle官方放出的指导手册是这么描述的:
每一个构建都是由一个或多个Project构成的.一个Project到底代表什么依赖于你想用Gradle做什么.举个例子,一个Project可以代表一个JAR或者一个网页应用.它也可能代表一个发布的 ZIP压缩包,这个ZIP可能是由许多其他项目的JARs构成的.但是一个Project不一定非要代表被构建的某个东西.它可以代表一件要做的事,比如部署你的应用.
每一个Project是由一个或多个Task构成的.一个Task代表一些更加细化的构建.可能是编译一些classes,创建一个JAR,生成javadoc,或者生成某个目录的压缩文件.
每个Task又是由一个或多个Action构成的,Gradle中有两种类型的Action,分别是doFirst和doLast.
gradle DSL 基础
Gradle的实质是配置脚本,执行一种类型的配置脚本时就会创建一个关联的对象,譬如执行Build script脚本就会创建一个Project对象,这个对象其实就是Gradle的代理对象。下面给出来各种类型Gradle对应的对象类型:
脚本类型 | 关联对象类型 |
Build script | Project |
Init script | Gradle |
Settings script | Settings |
Gradle的三种主要对象解释如下:
Project对象:每个build.gradle会转换成一个Project对象。
Gradle对象:构建初始化时创建,整个构建执行过程中只有这么一个对象,一般很少去修改这个默认配置脚本。
Settings对象:每个settings.gradle会转换成一个Settings对象。
可以看见,当我们编写指定类型Gradle脚本时我们可以直接使用关联对象的属性和方法;当然了,每个脚本也都实现了Script接口,也就是说我们也可以直接使用Script接口的属性与方法。
gradle脚本语法基础示例
// Apply the java plugin to add support for Java
apply plugin: 'java'
//多项目支持,Gradle支持可以将一个Project划分成为一个或多个子Project来构成
//include 'SubProject1','SubProject2','SubProject3'.........
//依赖库配置,支持maven , ivy , jCenter库,也可配置为本地库
repositories {
// You can declare any Maven/Ivy/file repository here, default is jCenter().
mavenCentral() //本地库支持
maven { //远程库支持
url "http://repo.mycompany.com/maven2" //远程库地址
}
}
/*依赖管理,模式为 scope group:'groupName',name:'artifactName',version:'versionNum'
可选的scope有:compile,testCompile,classpath等
*/
dependencies {
compile 'org.slf4j:slf4j-api:1.7.21'
testCompile 'junit:junit:4.12'
compile group: 'org.kasource.kajmx', name: 'ka-jmx-web', version: '0.2'
compile group: 'mx4j', name: 'mx4j', version: '3.0.2'
compile group: 'mx4j', name: 'mx4j-tools', version: '3.0.1'
compile group: 'mx4j', name: 'mx4j-impl', version: '2.1.1'
compile group: 'cglib', name: 'cglib-nodep', version: '3.2.4'
compile group: 'log4j', name: 'log4j', version: '1.2.17'
compile group: 'jdom', name: 'jdom', version: '1.1'
compile group: 'org.springframework', name: 'spring-support', version: '2.0.8'
compile group: 'commons-collections', name: 'commons-collections', version: '3.2.2'
}
//任务定义方式,从下例中可以看到对action的使用方式
task hello{ //定义一个no-action类型的任务,在任何其他类型的任务执行时,该任务内部代码都会被调用
println 'hello world'
}
task helloAction << { //定义一个action类型的任务,仅在调用该任务本身时执行,其实是doLast{} Action的简写方式
println 'hello action'
}
task helloLoop << { //循环的使用方式,.times 和 it是关键字
10.times{a-> //此处a-> 可省略,下一句中的a 可用it替代,因为循环中包含隐式参数it
println "it is: " + a
}
}
//任务依赖
task dependsHell(dependsOn:hello)<<{
println "I'm depends on task named 'hello'"
}
常用的gradle命令
- 查看版本号: gradle -v
- 编译执行某个task: gradle Task名
- 静默编译执行某个task: gradle -q Task名(q表示quiet模式,表示编译执行Gradle脚本的过程中,只输出必要的信息. 除了quiet模式外,Gradle中还有其他三种模式)
- 编译执行某个Project中的某个task:gradle -b Project名 Task名(Gradle默认只执行build.gradle文件中,自定义其他文件xxx.gradle编译运行显式指定Project名称,这里的build.gradle其实表示的就是build Project)
- 显示所有的Project:gradle projects 显示所有的task:gradle tasks
- 显示gradle的gui:gradle –gui 或 gradle –gui&(后台运行)
- 查找所有的gradle命令: gradle –help
Gradle脚本语言详细信息可参考gradle脚本基础全攻略