Gradle Tips#1-tasks
以这篇博客開始,我将写一系列关于Gradle的文章,用来记录接触Gradle构建脚本以来我所理解的Gradle。
今天要讲的就是Gradle tasks以及task的配置和运行。可能有的读者还不了解Gradle task。用真实的样例来展示应该更容易被理解。
以下的代码展示了三个Gradle task,稍后会解说这三者的不同。
task myTask {
println "Hello, World!"
}
task myTask {
doLast {
println "Hello, World!"
}
}
task myTask << {
println "Hello, World!"
}
我的目的是创建一个task。当它运行的时候会打印出来”Hello, World!”。
当我第一次创建task的时候,我推測应该是这样来写的:
task myTask {
println "Hello, World!"
}
如今,试着来运行这个myTask,在命令行输入gradle myTask,打印例如以下:
user$ gradle myTask
Hello, World!
:myTask UP-TO-DATE
这个task看起来起作用了。
它打印了”Hello, World!”。
可是,它事实上并没有像我们期望的那样。以下我们来看看为什么。在命令行输入gradle tasks来查看全部可用的tasks。
user$ gradle tasks
Hello, World!
:tasks
------------------------------------------------------------
All tasks runnable from root project
------------------------------------------------------------
Build Setup tasks
-----------------
init - Initializes a new Gradle build. [incubating]
..........
等等,为什么”Hello, World!”打印出来了?我不过想看看有哪些可用的task,并没有运行不论什么自己定义的task!
原因事实上非常easy。Gradle task在它的生命周期中有两个基本的阶段:配置阶段 和 运行阶段。
可能我的用词不是非常精确,但这的确能帮助我理解tasks。
Gradle在运行task之前都要对task先进行配置。那么问题就来了,我怎么知道我的task中,哪些代码是在配置过程中运行的,哪些代码是在task运行的时候运行的?答案就是,在task的最顶层的代码就是配置代码,比方:
task myTask {
def name = "Pavel" //<-- 这行代码会在配置阶段运行
println "Hello, World!"////<-- 这行代码也将在配置阶段运行
}
这就是为什么我运行gradle tasks的时候,会打印出来”Hello, World!”-由于配置代码被运行了。但这并非我想要的效果,我想要”Hello, World!”只在我显式的调用myTask的时候才打印出来。
为了达到这个效果,最简单的方法就是就是使用Task#doLast()方法。
task myTask {
def text = 'Hello, World!' //configure my task
doLast {
println text //this is executed when my task is called
}
}
如今,”Hello, World!”只会在我运行gradle myTask的时候打印出来。Cool。如今我已经知道怎样配置以及使task做正确的事情。另一个问题,最開始的样例中。第三个task的<<符号是什么意思?
task myTask2 << {
println "Hello, World!"
}
这事实上不过doLast的一个语法糖版本号。
它和以下的写法效果是一样的:
task myTask {
doLast {
println 'Hello, World!' //this is executed when my task is called
}
}
可是,这样的写法全部的代码都在运行部分。没有配置部分的代码,因此比較适合那些简小不须要配置的task。一旦你的task须要配置,那么还是要使用doLast的版本号。
Happy Gradling
Gradle Tips#1-tasks的更多相关文章
- org.gradle.api.internal.tasks.DefaultTaskInputs$TaskInputUnionFileCollection cannot be cast to org.gradle.api.internal.file.collections.DefaultConfigurableFileCollection
转载请注明出处:http://www.cnblogs.com/cnwutianhao/p/6709758.html Android Studio导入项目报错: org.gradle.api.inter ...
- Android studio Error:org.gradle.api.internal.tasks.DefaultTaskInputs$TaskInputUnionFileCollection cannot be cast to
http://blog.csdn.net/FlyRabbit_1/article/details/74536317 Error:org.gradle.api.internal.tasks.Defaul ...
- [Android Pro] Gradle Tips#2-语法
referece to : http://blog.csdn.net/lzyzsd/article/details/46935063 在第一篇博客中,我讲解了关于tasks和构建过程中task的不同阶 ...
- [Android Pro] Gradle Tips#1-tasks
reference to : http://trickyandroid.com/gradle-tip-1-tasks/ http://blog.csdn.net/lzyzsd/article/deta ...
- Gradle tip #3: Tasks ordering
I noticed that the quite often problem I face when I work with Gradle - is tasks ordering (either ex ...
- Gradle tip #1: tasks
With this post I would like to start series of Gradle-related topics I wish I knew when I first star ...
- Gradle Goodness: Excluding Tasks for Execution
In Gradle we can create dependencies between tasks. But we can also exclude certain tasks from those ...
- Gradle Goodness: Adding Tasks to a Predefined Group
In Gradle we can group related tasks using the group property of a task. We provide the name of our ...
- Error:org.gradle.api.internal.tasks.DefaultTaskInputs$TaskInputUnionFileCollection cannot be cast to...异常处理
这个是打开Android Studio项目报的错误提示,单纯从上面的提示还是不能太直接的知道什么问题.后来我想这个项目的Gradle版本与我当前AS使用的版本不一致,可能是这个问题. 修改build. ...
随机推荐
- [Javascript] Web APIs: Persisting browser data with window.localStorage
Local Storage is a native JavaScript Web API that makes it easy to store and persist data (as key-va ...
- Android 编程下 Activity 的创建和应用退出时的销毁
为了确保对应用中 Activity 的创建和销毁状态进行控制,所以就需要一个全局的变量来记录和销毁这些 Activity.这里的大概思路是写一个类继承 Application,并使获取该 Applic ...
- 给UIImage添加蒙版
http://stackoverflow.com/questions/17448102/ios-masking-an-image-keeping-retina-scale-factor-in-acco ...
- indexOf()忽略大小写方法
indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置.如果没有出现,则输出-1. indexOf() 方法对大小写敏感!所以要检索字符串且忽略大小写的时候,可以先把字符串转换成全部 ...
- jwplayer修改logo右键版权
jwplayer二次编译,可以自定义自己的logo和右键版权.
- html5响应式布局
1.media控制布局 <link type="text/css" rel="stylesheet" href="css04.css" ...
- 探索A@1db9742
public class S { /** * @param args */ public static void main(String[] args) { System.out.printl ...
- String类的使用说明
(1)Length()取一个字符串的长度:public int length(); public calss StringLength1{ public static void main(String ...
- hdu5355 Cake(构造)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Cake Time Limit: 2000/1000 MS (Java/Other ...
- 不用派生CTreeCtrl不用繁琐的过程 教你如何让CTreeCtrl的每一项有ToolTip提示
最近工作中需要让CTreeCtrl控件的每一项都有提示信息,于是谷歌百度,爬山涉水,结果是………….在CodeProject里找到一篇文章是把CTreeCtrl派生出新类,重载一些函数自定义内容.使用 ...