gradle学习(17)-被合并的ant
最后更新于:2022-04-01 06:51:57
## 1.在gradle使用ant
~~~
task hello << {
String greeting = 'hello ant'
ant.echo(message:greeting)
}
~~~
使用的是ant中的echo任务执行打印信息
~~~
qianhuis-Mac-mini:0112 qianhui$ gradle hello
:hello
[ant:echo] hello ant
BUILD SUCCESSFUL
Total time: 2.629 secs
~~~
上面是使用嵌套的方法传递信息个 ant,现在直接传递试试
~~~
task hello << {
ant.echo("Hello ant")
}
~~~
~~~
qianhuis-Mac-mini:0112 qianhui$ gradle hello
:hello
[ant:echo] Hello ant
BUILD SUCCESSFUL
Total time: 3.556 secs
~~~
你还可以个 ant任务传递闭包代码块:
~~~
task zip << {
ant.zip(destfile:'archive.zip'){
fileset(dir:'src'){
include(name:'**.xml')
exclude(name:'**.java')
}
}
}
~~~
将src下的文件打包成archive.zip压缩包,只打包xml文件,不打包java文件。
先在src下随便建几个xml文件,执行命令:
~~~
qianhuis-Mac-mini:0112 qianhui$ gradle zip
:zip
BUILD SUCCESSFUL
Total time: 2.801 secs
~~~
会在根目录下生成了一个压缩文件:
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-01-07_568e4667dbff5.jpg)
## 2.ant类型
操作ant.path对象。
~~~
task list << {
def path = ant.path{
fileset(dir:'libs',includes:'*.jar')
}
path.list().each{
println it
}
}
~~~
~~~
qianhuis-Mac-mini:0112 qianhui$ gradle list
:list
/Users/qianhui/Documents/Developer/gradle_project/0112/libs/1.jar
BUILD SUCCESSFUL
Total time: 2.943 secs
~~~
## 3.使用自定义的ant任务
使用taskdef或者typedef关键字来自定义任务,与你在build.xml中是一样的效果。
~~~
task check <<{
ant.taskdef(name:'pmd',
classname:'net.sourceforge.pmd.ant.PMDTask',
classpath:configurations.pmd.asPath)
ant.pmd(shortFilenames:'true',
failonruleviolation:'true',
rulesetfiles:file('pmd-rules.xml').toURI.toString()){
formatter(type:'text',toConsole:'true')
fileset(dir:'src')
}
}
configurations{
pmd
}
dependencies{
pmd group:'pmd',name:'pmd',version:'4.2.5'
}
~~~
## 4.导入ant的构建脚本build.xml
#### 包含ant脚本
大家都知道ant的构建脚本是 build.xml文件,但是你不知道的是gradle可以包含该build.xml能解析里面的信息。看gradle是如何做的:
首先生成一个build.xml 文件:
~~~
<project>
<target name="hello">
<echo>Hello, from Ant</echo>
</target>
</project>
~~~
build.gradle包含该xml文件:
~~~
ant.importBuild 'build.xml'
~~~
执行命令,我们执行build.xml中定义的hello任务试试:
~~~
qianhuis-Mac-mini:0112 qianhui$ gradle hello
:hello
[ant:echo] Hello, from Ant
BUILD SUCCESSFUL
Total time: 2.775 secs
~~~
嘿,还真的可以。
#### 添加依赖
既然可以将ant的任务当成gradle的任务,那么我们添加一个依赖试试:
~~~
ant.importBuild 'build.xml'
task intro(dependsOn:hello) << {
println 'Hello,from gradle'
}
~~~
执行任务试试
~~~
qianhuis-Mac-mini:0112 qianhui$ gradle intro
:hello
[ant:echo] Hello, from Ant
:intro
Hello,from gradle
BUILD SUCCESSFUL
Total time: 3.726 secs
~~~
一样可以。
#### 使用task behaviour
~~~
ant.importBuild 'build.xml'
task intro(dependsOn:hello) << {
println 'Hello,from gradle'
}
hello <<{
println 'Hello,from gradle'
}
~~~
~~~
qianhuis-Mac-mini:0112 qianhui$ gradle hello
:hello
[ant:echo] Hello, from Ant
Hello,from gradle
BUILD SUCCESSFUL
Total time: 3.704 secs
~~~
一样有效果。
#### 在ant脚本中添加依赖
我们还可以在build.xml中依赖我们在build.gradle 中定义的任务。修改build.xml文件:
~~~
<project>
<target name="hello" depends="intro">
<echo>Hello, from Ant</echo>
</target>
</project>
~~~
修改build.gradle
~~~
ant.importBuild 'build.xml'
task intro << {
println 'Hello,from gradle'
}
hello <<{
println 'Hello,from gradle'
}
~~~
执行命令:
~~~
qianhuis-Mac-mini:0112 qianhui$ gradle hello
:intro
Hello,from gradle
:hello
[ant:echo] Hello, from Ant
Hello,from gradle
BUILD SUCCESSFUL
Total time: 2.713 secs
~~~
#### 修改build.xml中target名称
build.xml
~~~
<project>
<target name="hello" >
<echo>Hello, from Ant</echo>
</target>
</project>
~~~
build.gradle
~~~
ant.importBuild ('build.xml'){
antTargetName ->'a-'+antTargetName
}
task intro << {
println 'Hello,from gradle'
}
~~~
这个时候执行命令一定要在hello前加a-
~~~
qianhuis-Mac-mini:0112 qianhui$ gradle a-hello
:a-hello
[ant:echo] Hello, from Ant
BUILD SUCCESSFUL
Total time: 3.631 secs
~~~