首页 > 代码库 > Gradle学习(一)
Gradle学习(一)
安装
Gradle需要jdk1.5以上的安装环境,Gradle装配了自己的Groovy库,所以无需安装Groovy,配置GRADLE_HOME以及PATH
gradle -v 测试安装成功与否
Project与Task
每一个Gradle的配置都是由一个或多个Project组成,Project的含义取决于你用Gradle来做什么,一个Project可能代表一个Jar library 或者一个web应用或者一个zip压缩包,一个Project并不一定代表一个即将被构建的项目,
也可能代表一个已经被构建好的项目。
每一个Project由一个或多个Task组成,一个Task代表一些原子性的构建工作,可能是编译代码,打jar包,生成java文档,或者发布一些归档信息到一个repository。
Hello World
用命令行运行Gradle构建的时候,会在当前目录下寻找一个名为build.gradle的文件
在这个build script里定义了一个名为hello的task,当你运行gradle hello命令时gradle就会执行hello这个task里面的内容,这样定义的方式与Ant中target十分相似,Gradle中的task可以等价于Ant中的target
task hello { doLast{ println "Hello World!" } }
运行gradle -q hello 得到如下结果(-q选型时关闭gradle日志信息,直接使用gradle hello也可以得到相同的结果,但会打印出一些Gradle的日志)
一种更简洁的hello task定义方式,输出结果与上述方式结果一致
?
1 2 3 | task hello << { println ‘Hello World‘ } |
Task依赖
?
1 2 3 4 5 6 | task hello << { println ‘Hello World‘ } task intro(dependsOn: hello) << { println "I‘m Gradle" } |
依赖与被依赖task的定义顺序可以颠倒
?
1 2 3 4 5 6 | task taskX(dependsOn: ‘taskY‘ ) << { println "taskX" } task taskY << { println "taskY" } |
动态Task
?
1 2 3 4 5 6 | 4 . times { counter -> task "task$counter" <<{ println "I‘m task number $counter" } } |
操作已经存在的Task
一旦一个task被创建了那么他们就可以被API访问,这一点与Ant不同
?
1 2 3 4 5 6 7 | 4 . times { counter -> task "task$counter" <<{ println "I‘m task number $counter" } } task0.dependsOn task2, task3 |
?
1 2 3 4 5 6 7 8 9 10 11 12 | task hello << { println ‘Hello Earth‘ } hello.doFirst { println "Hello Venus" } hello.doLast { println "Hello Mars" } hello << { println "Hello Jupiter" } |
doFirst和doLast可以被定义并执行多次(定义同样的操作类型则按照定义的顺序执行) hello << 等价于hello.doLast
额外的Task配置
你可以通过ext.设置task的额外属性
?
1 2 3 4 5 6 | task myTask { ext.myProperty = "myValue" } task printTaskProperties <<{ println myTask.myProperty } |
定义默认任务
?
1 2 3 4 5 6 7 | defaultTasks ‘clean‘ , ‘run‘ task clean << { println "Default Cleaning!" } task run << { println "Default Running!" } |
相当于执行gradle clean run 命令
在多工程构建中每一个子项目都可以拥有其默认的任务,如果一个子项目没有指定其默认的任务,那么就会执行其父项目的默认任务(如果父项目中定义的话)
gradle有配置阶段以及执行阶段,在配置阶段之后Gradle会知道将要被执行的所有任务,Gradle给你提供一个“钩子”来让你使用这些信息
下面这个例子阐述了release task是不是被执行的task之一,根据结果你可以分配不同的值给不同的变量
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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" } } |
当release task被执行的时候version = "1.0" 没被执行的时候 version = "1.0-SNAPSHOT"
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。