gradle学习(17)-被合并的ant

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


会在根目录下生成了一个压缩文件:


gradle学习(17)-被合并的ant_第1张图片


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


你可能感兴趣的:(gradle)