博客逐步迁移至 极客兔兔的小站java
这是一篇Java Gradle入门级的随笔,主要介绍Gradle的安装与基本语法,这些内容是理解和建立build.gradle
的基础,关于Gradle各类插件的使用将会在其余随笔中介绍。
有什么疑问欢迎在文末关注留言,若是本文对你有用,那在右下角点个推荐吧~api
GRADLE_HOME/bin
添加到环境变量。Linux:安装Gradle以后,配置PATH
工具
(1) 在~/.profile中加入GRADLE_HOME = YOUR_INSTALLATION_DIR
(2) 在~/.profile中加入PATH=$PATH:$GRADLE_HOME/bin(3) 执行source ~/.profile从新加载profile文件测试
gradle -v
可测试配置是否正确,更多命令行用法可执行gradle -h
。本文代码测试版本为Gradle 2.11gradle
一个脚本是一系列待执行操做(action)、属性的集合,有时,咱们只想执行其中的某几个操做,那这几个操做及其相关的属性构成了一个任务(task),任务是gradle中的执行单元。比任务更大的是项目(project),每每包括多个任务。优化
task hello << { println "Hello World!" + project.name // => Test // 或 println "Hello World!$project.name" // =>Test }
//已存在属性直接赋值便可 version = "1.0" description = "I Am A Gradle Test!" // 新增属性须要使用 ext ext { createDate = "Mar 2016" } ext.creator = "呆尐兔兔" // task hello1 task hello1 { doFirst { // name为task的内置属性,值为task名称 println "1. My Name is " + name // ==> hello println "2. I Belong To Project $project.name" //=>Test } doLast { println "3. The Version Is " + project.version println "4. I Am Created On " + project.createDate } } // task hello2 task hello2 << { ext { nickname = "excited"} println "Step 2: $nickname" //=> excited } hello2.doFirst { println "Step 1" } hello2.doLast { println "Step 3 " }
执行结果以下 C:\Users\gzd\Desktop\Test>gradle hello1 hello2 :hello1 1. My Name is hello1 2. I Belong To Project Test 3. The Version Is 1.0 4. I Am Created On Mar 2016 :hello2 Step 1 Step 2: excited Step 3
doFirst
-><<
->doLast
。<< 经常使用来开速添加任务。// 单任务依赖 // 该任务依赖的其余任务将先执行 task hello1 << { println "Step 1" } task hello2(dependsOn:hello1) << { println "Step 2" } // 等价于 task hello2 << { println "Step 2" } // hello2.dependsOn hello1
// 多任务依赖 task hello2 << { // ... } hello2.dependsOn hello1, hello3 // 等价于 task hello2(dependsOn: [hello1,hello3]) << { ... }
task hello1 << { println "Step 1" } task hello0 << { println "Step 0" } task hello2(dependsOn:[hello1,hello0]) << { println "Step 2" } task hello3 << { println "Step 3" }
如下是执行结果 C:\Users\gzd\Desktop\Test>gradle hello2 hello3 Step 0 Step 1 Step 2 Step 3
字母表
。shouldRunAfter
、mustRunAfter
、finalizedBy
三个选项帮助定义任务执行顺序。// 使用groovy语法动态构建任务 (1..6).each { task "hello$it" << { println "Executing $name" //=>hello(1..6) 见2.2 } } hello1.dependsOn hello2 hello3.dependsOn hello2 hello5.finalizedBy hello6 hello5.mustRunAfter hello4
依次执行下列命令 gradle hello1 ==> 2->1 gradle hello1,hello3 ==> 2->1->3 gradle hello5 ==> 5->6 gradle hello5,hello4 ==> 4->5->6
// 考虑如下代码,执行gradle hello1将会报错 // 换为shouldRunAfter则不会报错,执行顺序为3->2->1 hello1.dependsOn hello2 hello2.dependsOn hello3 hello3.mustRunAfter hello1
// 如下代码将构建出hello0,hello1,hello2,hello3 // 下标从0开始 4.times { counter -> task "hello$counter" << { println "I'm $name" //=> hello[0..3] } }
// 如下代码将匹配以clean开头的任务 // 例如gradle cleanTest => Task is cleanTest // gradle cleanHello => Task is cleanHello tasks.addRule("Pattern:clean<fileName>") { String taskName -> if(taskName.startsWith("clean")) { task(taskName) << { println "Task is $name"; } } }
// gradle hello => hello:SKIPPED(条件不知足,不执行) // onlyIf 经常使用于判断当前环境是否知足执行条件 version = '1.0' ext { createYear = '2015' } task hello << { println 'I was Created in ' + createYear } hello.onlyIf { project.hasProperty('createYear') && project.createYear == '2016'}
// gradle h2 => :hello1 SKIPPED :hello2 Step 2 // 即便2依赖1,1被禁用,2仍能执行 // 经常使用于测试,更换旧代码 task hello1 << { println 'Step 1' } task hello2(dependsOn:hello1) << { println 'Step 2' } hello1.enabled = false
enabled
是task的一个属性,hello1 能够写为task hello1 { enabled = false; doLast { println 'Step 1' } }
task hello { ext { testFile = file('in.txt') } String outFileName = 'out.txt' File outFile = new File(outFileName) inputs.file testFile outputs.file outFile doLast { def property = new XmlParser().parse(testFile) def key = property.key[0].text() def value = property.value[0].text() def destFile = new File(outFileName) destFile.text = "$key = $value" } }
第一次执行 gradle hello => :hello BUILD SUCCESSFUL 第二次执行 gradle hello => :hello UP-TO-DATE
--rerun-tasks
参数gradle hello --rerun-tasks // gradle -b build.gradle hello --rerun-tasks