gradle--第六章、基本构建脚本3

6.9 额外的任务属性
你也可以给一个任务添加你自己的属性。要添加一个名字为myProperty的属性,需要给ext.myProperty设置一个初始值。设置完初始值后,这个属性就可以像其他已经定义的任务属性一样被读取或者设置。
Example 6.12. Adding extra properties to a task


build.gradle
task myTask {
    ext.myProperty = "myValue"
}


task printTaskProperties << {
    println myTask.myProperty
}
Output of gradle -q printTaskProperties
> gradle -q printTaskProperties
myValue
额外的属性不仅仅限于任务,你可以阅读Section 13.4.2, “Extra properties”了解更多这方面的知识。
6.10 使用Ant任务
Ant任务是Gradle的第一等公民。依靠Groovy,Gradle对Ant任务提供了非常好的集成。Gradle包含了极好的AntBuilder.通过使用build.xml文件,在Gradle中使用Ant任务跟直接使用Ant任务一样方便,并且更加强大。从下面的例子中,你可以了解到如何使用Ant任务以及如何访问Ant属性
Example 6.13. Using AntBuilder to execute ant.loadfile target


build.gradle
task loadfile << {
    def files = file('../antLoadfileResources').listFiles().sort()
    files.each { File file ->
        if (file.isFile()) {
            ant.loadfile(srcFile: file, property: file.name)
            println " *** $file.name ***"
            println "${ant.properties[file.name]}"
        }
    }
}
Output of gradle -q loadfile
> gradle -q loadfile
 *** agile.manifesto.txt ***
 Individuals and interactions over processes and tools
Working software over comprehensive documentation
Customer collaboration  over contract negotiation
Responding to change over following a plan
 *** gradle.manifesto.txt ***
Make the impossible possible, make the possible easy and make the easy elegant.
(inspired by Moshe Feldenkrais)
在构建脚本中你可以通过Ant做更多的事情,你可以从 Chapter 16, Using Ant from Gradle了解更多这方面的知识。
6.11 使用方法
使用Gradle你可以自己组织构建逻辑。最上层次的组织构建逻辑就像上面例子中演示到的,就是提取方法。
Example 6.14. Using methods to organize your build logic


build.gradle
task checksum << {
    fileList('../antLoadfileResources').each {File file ->
        ant.checksum(file: file, property: "cs_$file.name")
        println "$file.name Checksum: ${ant.properties["cs_$file.name"]}"
    }
}


task loadfile << {
    fileList('../antLoadfileResources').each {File file ->
        ant.loadfile(srcFile: file, property: file.name)
        println "I'm fond of $file.name"
    }
}


File[] fileList(String dir) {
    file(dir).listFiles({file -> file.isFile() } as FileFilter).sort()
}
Output of gradle -q loadfile
> gradle -q loadfile
I'm fond of agile.manifesto.txt
I'm fond of gradle.manifesto.txt
后面你将会看到,在多工程构建中,这些方法可以被子工程共享。如果你的构建逻辑变得越来越复杂,Gradle为你提供了更加方便的方法来组织它们。查看Chapter 60, Organizing Build Logic.
6.12 缺省任务
Gradle允许你在构建中定义一个或多个缺省的任务
Example 6.15. Defining a default tasks


build.gradle
defaultTasks 'clean', 'run'


task clean << {
    println 'Default Cleaning!'
}


task run << {
    println 'Default Running!'
}


task other << {
    println "I'm not a default task!"
}
Output of gradle -q
> gradle -q
Default Cleaning!
Default Running!
这个相当于运行gradle clean run.在多工程构建中,每个子工程可以拥有自己的缺省任务,如果一个子工程没有定义缺省任务,使用父工程的缺省任务(如果父工程定义了)


6.13 通过DAG配置
我们后面在详细章节将会介绍到(see Chapter 56, The Build Lifecycle),Gradle有两个阶段,一个配置阶段,一个执行阶段。通过配置阶段,Gradle就知道了所有要执行的任务,Gradle为你提供了一个钩子让你可以充分利用这个。这方面的一个实例就是检查release任务是否需要被执行,依赖这个,你可以为一些变量设置不同的值。
在下面的例子中,distribution and release 任务的执行将导致version变量不同的值
Example 6.16. Different outcomes of build depending on chosen tasks


build.gradle
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'
    }
}
Output of gradle -q distribution
> gradle -q distribution
We build the zip with version=1.0-SNAPSHOT
Output of gradle -q release
> gradle -q release
We build the zip with version=1.0
We release now
这里需要注意的是whenReady在release任务执行之前影响了release任务,这个依然有效,即使release任务不是主任务(例如,任务是传递给gradle命令行的)
6.14 接下来做什么
在这一节中,我们大概了解了一下任务。但关于任务方面的只是不仅仅这么一点。如果你想接着了解更多的详情,查看Chapter 14, More about Tasks.
否则的话,继续跟着文档了解后面的第七章 Java Quickstart and Chapter 8, Dependency Management Basics.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值