Gradle语法简单解释
学习Gradle之前需要简单了解下Groovy的语法,主要了解下方法的定义,调用,以及闭包的使用。Groovy在java的基础上进行了语法优化,省略了一些格式性质的代码。
1.接收闭包参数的方法
定义一个接收Closure参数的方法
def saySomeThing (Closure config){
println "some thing"
}
//调用
saySomeThing({})
//一对花括号 ' {} ' 其实是 Closure 对象的实例化
saySomeThing()
2.闭包参数的代理执行
//定义一个类
class AttrHandler{
def fun1(String value){
println "fun1 receive value ->"+value
}
def fun2(String... values){
println
for(String value:values){
println "func2 receive value ->"+value
}
}
}
//定义一个闭包 并把delegate(代理类)设置成AttrHandler 此时调用这个闭包传入的参数应该是代理类实例
def behaveAction(Closure config){
config.delegate = new AttrHandler()
//对传入的闭包参数的调用
config()
}
//使用
behaveAction{
fun1 "好吃的"
fun2 "大碗菜","康师傅","哇哈哈","海底捞"
}
Gradle使用入门
接下来就可以学习Gradle的API了
Gradle核心API
Gradle实战
Gradle常用插件
Gradle引导教程
1.Gradle的基本组成
项目(Project) 和 任务(tasks),Gradle 里的任何东西都是基于这两个基础概念。
- 项目是指我们的构建产物(比如Jar包)或实施产物(将应用程序部署到生产环境)
- 任务是指不可分的最小工作单元,执行构建工作(比如编译项目或执行测试)
- 每一个构建都是由一个或多个 projects 构成的,每一个 project 是由一个或多个 tasks 构成的,一个 task是指不可分的最小工作单元,执行构建工作(比如编译项目或执行测试)
2.Gradle构建系统的组成
- build.gradle 我们称这个文件为一个构建脚本,这个脚本定义了一个模块和编译用的tasks,它一般是放在项目的模块中,也可以放在项目的根目录用来作为编译结构全局设置,它是必须的
- settings.gradle 它描述了哪一个模块需要参与构建。每一个多模块的构建都必须在项目结构的根目录中加入这个设置文件,它也是必须的
- gradle.properties 用来配置构建属性,这个不是必须的
settings.gradle和gradle.properties的用法都十分简单,这里就不再多加说明,后面会给出示例,看示例就能明白其用法,现在主要对build.gradle的进行说明。
3.Gradle插件
- gradle build:编译整个项目,它会执行代码编译、代码检测和单元测试等
- gradle assemble:编译并打包你的代码, 但是并不运行代码检测和单元测试
- gradle clean:删除 build 生成的目录和所有生成的文件
- gradle check:编译并测试你的代码。其它的插件会加入更多的检查步骤,如使用 checkstyle、pmd、findbugs
4.依赖
- 外部依赖
dependencies {
compile group: 'commons-collections', name: 'commons-collections', version: '3.2'
// 简化写法
// compile 'commons-collections:commons-collections:3.2'
}
2.本地依赖
dependencies {
compile files('dir/file.jar')
compile fileTree(dir: 'libs', include: '*.jar')
}
3.项目依赖
往往一个完整的项目由多个子项目构成。在Gradle中,使用文件settings.gradle定义当前项目的子项目。默认情况下,每个子项目的名称对应着当前操作系统目录下的一个子目录。
include 'sub-project1', 'sub-project2', 'sub-project3'
如sub-project1依赖sub-project2,则在sub-project1的build.gradle中加入以下配置即可:
dependencies {
compile project(':sub-project2')
}
4.依赖关系管理
从宏观上说,依赖关系管理分为两个方面。首先,gradle需要知道你要构建或者运行的项目,以便找到它们。我们将这些导入的文件视为项目的依赖。第二,gradle需要构建或者打包你的项目产品。我们将这些导出的文件视为项目的发布。
例如在编译源码时项目需要Hibernate的某些jar包被加入到工程中,而在进行单元测试时还另需要Junit的某些jar被加入。这些被引入的jar包就是项目的依赖。Gradle允许对依赖进行相应的配置,通过不同的配置可以形成不同的依赖效果。例如:
apply plugin: 'java'
repositories {
mavenCentral()
}
dependencies {
compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.7.Final'
testCompile group: 'junit', name: 'junit', version: '4.+'
}
在项目编译时期,junit的jar包不会被引入,只有在单元测试时才会被引入。这样,就可以在不同的场景下加入相应的依赖关系,非常的灵活.
Java 插件中定义了许多标准的配置,例如如下:
compile
用来编译项目源代码的依赖
runtime
在运行时被生成的类使用的依赖。 默认的, 也包含了compile时的依赖。
testCompile
编译测试代码的依赖。 默认的, 包含runtime时的依赖和compile时的依赖。
testRuntime
运行测试所需要的依赖。 默认的, 包含上面三个依赖。
附加
1.问题描述:在项目中有使用api,compile,implementation三种依赖方式,不太清楚区别
这三个依赖类型应该都属于java-libaray这个java插件库
compile和api作用相同,但是不推荐使用,已经被弃用(过时)。。。
api依赖会传递,implementation依赖不传递。
api由于有依赖传递,编译会慢。
内部类,私有变量和方法等依赖传递也不能使用,所以不推荐使用api。
使用implementation不会得到'意外'的依赖。
推荐使用implementation!!!