gradle学习(8)-gradle的命令行

(以下所有内容都是根据官方文档学习。如果你对gradle有兴趣,希望你能直接学习官方文档,官方文档是最权威的。而且这样才能产生2份有意义的学习资料)

1.执行多个任务

在命令行下,要想执行多个任务,可以在gradle关键字后面跟多个任务名,之间要用空格隔开,执行的顺序按照你的输入的顺序执行。例如我们要执行编译和测试的任务。可以在命令行下输入:

D:GRADLE~2109>gradle compile test
:compile1
nihao
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:compileTestJava UP-TO-DATE
:processTestResources UP-TO-DATE
:testClasses UP-TO-DATE
:test UP-TO-DATE

BUILD SUCCESSFUL

Total time: 2.787 secs

可以看出先执行compile,然后是test。那么如果我倒过来呢?

D:GRADLE~2109>gradle test compile
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:compileTestJava UP-TO-DATE
:processTestResources UP-TO-DATE
:testClasses UP-TO-DATE
:test UP-TO-DATE
:compile1
nihao

BUILD SUCCESSFUL

Total time: 2.819 secs

还是这样的顺序,因为这个是gradle自带的任务,肯定要按严格的顺序执行。所以没有说服力,我们现在写一个自己的。

build.gradle

apply plugin:"java"

task test1<<{
&nbsp;&nbsp; &nbsp;println "test1"
}

task compile1 <<{
&nbsp;&nbsp; &nbsp;println "compile1"
}

这个时候按不同的顺序执行一下

这下验证了上面的说法,确实是按照输入的顺序执行的。

2.依赖任务

其实刚才我们让test先执行,compile后执行的时候已经可以看出,gradle会将命令行中列举的任务的依赖任务也执行了。不然先执行test肯定会报错了,就是因为test任务依赖于compile等任务,所以我们执行test任务的时候,它的依赖任务会先被执行,然后才执行test任务,命令行的输出看的很明显。

而且被依赖的任务只会被执行一次。

task compile1 <<{
	println "compiling source"
}

task compileTest1(dependsOn:compile1) <<{
	println "compiling unit tests"
}
task test1(dependsOn:[compile1,compileTest1])<<{
	println "running unit tests"
}

task dist1(dependsOn:[compile1,test1])<<{
	println "build the distribution"
}

看上面的例子,dist1依赖compile1和test1。然后test1又依赖compile1和compileTest1。疏导一下关系

dist1依赖:compile1、compileTest1

test1依赖:compile1、compileTest1

依据执行的顺序与命令行的列举顺序有关,且被依赖的任务只会被执行一次的这两个原则,思考一下输出应该是什么样子。

我的猜测是:

compiling source 
compiling unit tests
running unit tests
build the distribution

看看对不对

还好,蒙对了。

3.排除任务

gradle提供了排除某个特定任务的语法,不执行所依赖的任务中的某个任务,来看一下命令

gradle task1 -x task2 

在执行task1任务时不执行task1所依赖的task2任务。而且只删除task2有依赖,而task1没有依赖的任务。

同样我们来看看执行下面的命令

gradle -q dist1 -x test1  

考虑一下执行的结果。我自己先猜一下,刨除test1中的两个依赖项目。就剩下了

compiling source  
build the distribution

验证一下

4.倔强的构建方式

默认情况下,gradle在构建过程中遇到错误会自动停止,这样有些错误你无法一次性发现。但是你也可以去设置:即使遇到错也要倔强的构建,不撞南墙不回头。

这样的话等执行完毕后,再把所有的错误都打印出来,是不是很好呢。使用--continue属性。(这块还不太清楚怎么使用,以后知道了再补充)

5.智能匹配

执行任务的时候,任务名不需要写全,但是得能够匹配唯一一个。

task compile1 <<{
	println "compiling source"
}

task compileTest1 <<{
	println "compiling unit tests"
}
task test1<<{
	println "running unit tests"
}

task dist1<<{
	println "build the distribution"
}

task dist2 <<{
	println "dist2"
}

例如上面的任务,我们可以通过comile匹配compile1。但是dist就不能匹配dist1,因为还有一个dist2也匹配。执行的情况如下:

对于有2个单词组成的任务名,我们可以通过首字母的缩写匹配该任务。

6.选择特定的文件去执行

比如我们去执行同目录下sob目录下的的user.gradle构建文件。sob/user.gradle文件内容如下

task hello<<{
	println "using build file "$buildFile.name" in "$buildFile.parentFile.name""
}

执行该文件

D:GRADLE~2109>gradle -q -b sob/user.gradle hello
using build file "user.gradle" in "sob"

可以看出要在命令行上用-b 后面跟目录来表示指定的文件。任务在前或在后效果都是一样的。

D:GRADLE~2109>gradle -q hello -b sob/user.gradle
using build file "user.gradle" in "sob"
文章导航