跟doFirst和任务外的脚本不同,初始化脚本是针对所有Gradle工程起作用的脚本,而前者的作用对象是Task和单个工程。因此利用初始化脚本,我们可以完成一些面向整个Gradle构建环境的动作。就像mrhaki的做法,实现并安装自定义的BuildAdapter。
这个BuildAdapter的作用很简单,它结合Snarl(一种通知服务工具,下载)和Snarl_CMD(可以发送Snarl通知的命令行工具,下载),使得每次构建成功和失败都显示相应的通知信息。由于用到了初始化脚本,这一特性令所有Gradle构建都得以享受,而不用作任何调整。以下是mrhaki的做法:
- 实现init.gradle,并将它置于%USER_HOME%/.gradle目录下。
- 在init.gradle里面实现一个BuilderAdapter的子类,并安装。
class SnarlNotifyListener extends BuildAdapter {
void buildFinished(BuildResult result) {
if (result.failure) {
snarlNotify 'Gradle build failure', result.failure.message, true
} else {
snarlNotify 'Gradle build finished', 'Build successful'
}
}
void snarlNotify(title, message = 'No message', sticky = false) {
def cmd = [
'Snarl_CMD.exe的目录', // Replace with your local path.
'snShowMessage',
sticky ? '0' : '10', // If non-sticky display for 10 seconds.
title,
message,
'%GRADLE_HOME%/docs/groovydoc/groovy.ico' // Nice little icon, use local path.
]
cmd.execute()
}
}
def listener = new SnarlNotifyListener()
gradle.addBuildListener listener
实现上述步骤之后,每当你运行Gradle的任务,不论成功还是失败,snarl都会显示相应的消息。当然,在享受它之前,别忘了先去安装Snarl和Snarl_CMD。
mrhaki的做法只是实现初始化脚本的一种做法,还有一种做法就是利用命令行参数--init-script指出初始化脚本的路径:
gradle --init-script init.gradle
有时,你可能会想在初始化脚本里面使用外部类,这时需要先指出相应的classpath,这就要用到initscript。在初始化脚本里声明
initscript {
repositories {
mavenCentral()
}
dependencies {
classpath group: 'org.apache.commons', name: 'commons-math', version: '2.0'
}
}
之后,你就可以在脚本里使用其中声明的类了。
在使用初始化脚本的时候,需要记住它的一个约束:无法引用工程buildSrc里的任何类。这不奇怪,因为初始化脚本的运行是在任何构建之前,而此时的构建根本还未解析。
最后,说句题外话,在Gradle 0.9里面,已经有了一个Announce插件,它可以从你的构建里面向twitter、snarl、libnotify或growl发送通知。详情可以访问0.9的发布说明,但请注意,Gradle 0.9尚未正式发布,目前0.9发布的是第三预览版(0.9-preview-3),该说明目前还处于草稿状态。
本系列的其它部分:

最新评论
9 周 6 小时之前
9 周 1 天之前
11 周 5 天之前
11 周 5 天之前
17 周 2 天之前
17 周 4 天之前
19 周 3 天之前
20 周 1 天之前
20 周 2 天之前
20 周 5 天之前