了解Gradle最好先学习groovy语言的核心语法,方便学习
文章目录
1.Gradle的特性
-
gradle 兼容ant和maven,是在ant和maven取的中间值,既有ant的灵活配置又有maven的约定优于配置原理,使用编程的方式管理项目,更加具有逻辑性(个人理解)
-
特点:
1)可表达性的构建语言和底层API --gradle脚本中的元素都和Java类一对一的映射,支持暴露钩子到生命周期阶段
2)Gradle就是Grooby,通过编程语言实现来提供很强的逻辑表达
3)灵活的约定,更简单的约定文件的输入输出位置
4)鲁棒和强大的依赖管理
5)可扩展的构建
6)轻松的可扩展性
7)和其他构建工具集成(ant,Maven)
8)社区和公司的驱动
9)额外的特性,支持驼峰形式的命令访问(前提驼峰名是唯一的)
2.常用命令行和选项
gradle构建脚本默认的名字是build.gradle
2.1 gradle命令行:
i: gradle tasks 列出task
ii: gradle tasks --all 列出所有的task
iii:另外正确的任务顺序,任务前面执行了,后面就不会执行了
gradle gradle01 gradle02 如果 gradle02依赖了gradle01,那么gradle01不会执行两次
vi:支持task的驼峰命名执行,例如有tast groupTest {} ,那么命令行执行可以直接使用 gradle gT执行
v:在执行命令的时候排除一个任务,用-x来实现,例如 gradle gradle02 -x gradle01
2.2 命令行的选项
i:改变为INFO日志可以通过-i实现
ii:想打印执行期间发生的错误的堆栈总计信息,使用-s
上面两个联合可以这样使用 gradle gradle02 -is 或者gradle gradle02 -i-s
iii: -?,h,--help:打印出所有的命令项,包含描述信息
iv:-b,--build-file:gradle构建脚本的名称默认是build.gradle,改变的可以使用这个选项改变
v: --offline:通常构建中声明的依赖必须是在离线仓库中存在才可用,如果本地缓存中没有那么就会构建失败,这个可以检测本地缓存中依赖是否存在
2.3 参数选项
i:-D,--system-prop:Gradle是一个JVM进程运行的,和所有的Java进程一样,可以这样提供一个系统参数,就像-Dmyprop=myvalue这样 ,和maven插件传参一样
ii:-P,--project-prop:项目参数是构建脚本中可用的变量,你可以直接使用这个选项向构建脚本中传入参数,比如-Pmyprop=myvalue
2.4 日志选项
i:-i,--info:在默认配置中,gradle不会提供大量的输出信息,通过这个选项可以将gradle的日志级别改变到INFO以获取更多的信息。
ii:-s,--stacktrace:如果在构建运行中出现了错误,你会想要知道错误的源头,通过这个可以打印简单的堆栈跟踪消息,方便定位调试
iii:-q,--quiet:减少构建出错时答应出来的错误日志信息
2.5 帮助任务
i:tasks:显示项目中可运行的task,包含他们的描述信息,项目中应用插件可能会提供额外的task
ii:properties:显示项目中所有可用的属性。某些属性是由gradle的project对象提供的,project对象是构建的本质表现形式,其他属性都是用户自己定义的,要么来自属性文件或者命令行选项,要么是在直接构建脚本中定义的
2.6 gradle的守护进程
i:通过加上选项 --daemon实现 ,并且守护进程在3小时空闲时间类会自动过期
3. 例子
例子1:
步骤一:本地新建一个build.gradle文件
步骤二:build.gradle文件添加如下内容
task helloworld <<{
println "hello world"
}
或者使用
task helloworld {
dolast{
println "hello world"
}
}
步骤三:在当前目录 命令行中执行gradle helloworld 看看效果
例子2:
同样上面的文件
task startSession <<{
println "hello world"
}
def chant (){
ant.echo(message:'Repeat after me...')
}
3.times{
task "gradle$it" <<{
println 'gradle vison'
}
}
gradle0.dependsOn startSession
gradle2.dependsOn gradle0, gradle1
task groupTherapy(dependsOn:gradle2)
然后命令行中执行gradle gT (这里使用的驼峰命名的缩写),看有什么效果(dependsOn这里是依赖关系)
执行命令gradle gradle1 grdle2 ,看看又有什么输出,有什么不同处?
阅读《Gradle实战》笔记