Andrew的专栏

爱看电影,打羽毛球,爱看英文,经常翻译技术文章。热爱互联网,Android、WM开发者,谷歌粉丝。...

学习Ant编译脚本

学习Ant编译脚本


之前有了解到JAVA的编译脚本是Ant,当然现在有出来一个更加牛的Maven。其实脚本这东西都是差不多的,我们先一步一步来学习Ant,以后再学习Maven、Rake。

之前在做Openfire(即时通讯服务器)时使用过Ant,但是一直没有时间去了解这个脚本的具体工作原理。最近遇到一个问题:通过Eclipse编译一个很大的Android工程非常的慢,因为里面的资源比较多,而Eclipse的ADT需要对所有的资源进行重新的整理生成资源号,生成资源压缩包。而且,有时候需要编译几个版本,需要对一个文件的参数进行调整,经常会忘记这个事情,导致给客户的APK不能使用。再则对文件的“频繁修改”使得git commit的东西多了,不理由对版本历史的查看。于是,决定利用点业余的时间好好学习一下Ant。

 以上是我对Ant的了解和需求。下面是我一步一步的学习过程。

了解Ant的历史,What's Ant

原来Ant是Apache的一个子项目http://ant.apache.org/,当然也就是开源的。Ant是用Java写的,目前的主要用途是编译Java的应用。Ant会包含很多的Task和Type,第三方有一些库提供了一些这样的Task和Type主要是方面我们在特定场景的使用。Google一下,果然发现以Android方面的antlibhttp://code.google.com/p/autoandroid/wiki/AndroidAnt。所谓的这些lib,就是进行了再次的抽象,把我们要做的事情简单化了。但是,我们一定要知其然知其所以然。一定要搞明白背后的原理,而不是照着别人的命令敲就是了,那是很没出息的。而且万一遇到个啥问题也没有办法自己解决,又要去网上“跪求”了。

相关文档

http://ant.apache.org/manual/

官方的文档是很好的学习材料,当然由于是英文的,写的也比较全面,花的时间会比较多。如果你是想速成的话,可以找个demo来学习,然后依葫芦画瓢。在工作中经常为了赶项目经常要做这样的事情。但是我不提倡这种方便面的学习方法。

官方文档介绍了如何安装Ant,相信这对大家没有问题,有疑问再联系我。

接下来,我们跟这文档一步一步来学习。

Hello World

在上面的官方文档中有Hello World的实例,叫我们一步一步的跟着学习。http://ant.apache.org/manual/ -->Tutorials --> Hello World with Apache Ant。你也可以先看看Ant的几个基本的概念,下面会做简单的介绍。熟悉或者简单了解这些基本的概念对学习hello world有帮助,或者交替的看,反复的看。将这两者理解好了,就入门了,甚至你比一些copy着用了很多年Ant的人还厉害。因为你了解其中的原理,你可以通过这些原理分析出现的问题。

基本概念

Projects
每一个build.xml只有一个Project,Project表示一个工程吧,里面可以知道这个工程的全局属性。这个比较固定,照写就可以。如下:
<project name="helloWorld" basedir="." default="main">
......
<target name="main" depends="clean,run"/>
</project>
熟悉name顺便定义一个就行。basedir指定相对路径的基础,这里是指定了当前路径。default是指如果执行ant时不指定哪一个target时,就使用这个默认的。
Targets
target翻译过来就是目标吧,每一个project都会包含很多的目标,例如编译/compile、执行/run、清理clean、打包/package等等。特别是打包,我们可能要针对不同的客户打不同的包给他们,这时候就显得得心应手了。例子如下:
<target name="run" depends="jar">
       <java fork="true" classname="${main-class}">
           <classpath>
               <path refid="classpath"/>
               <path location="${jar.dir}/${ant.project.name}.jar"/>
           </classpath>
       </java>
</target>

属性name是这个target的名字,可以被其它的target引用。我们看depends的熟悉,jar就是另外一个target的name。depends是指定target之间的依赖关系,这样就省去我们很多的麻烦。例如,在run之前,需要先执行compile这个target,否则就没有东西可以run了。通过depends的指定,我们在想run的时候就run吧,Ant自然会根据我们的depends先执行其它的依赖,省心省力。
Tasks

而要实现一个目标,需要执行很多的任务的,因此Tasks是被包含在Targets里面的。从上面的例子可以看到,<java />这个元素就是一个task。这是编写build.xml的关键,因为这个才是真正被执行的。Ant内置了很多的Task,如复制文件,删除文件夹,压缩文件等等,下面的链接http://ant.apache.org/manual/tasklist.html包含了所有的。平时使用的时候可以随时查看。

Properties
property相对于C++里面的宏吧,或者Java中的constant。这是一个key-value的形式出现的。这个key可以在其它地方中引用,通过${key}这种形式。如:
<property name="build.dir" location="build"/>
<target name="init">
      <mkdir dir="${build.dir}"/> //创建路径
</target>
这个${build.dir}现在是代表了build这个相对路径文件夹,我还可以在不改变build.xml的情况下,通过Ant的执行参数来改变这个值。如Ant -Dbuild.dir = build-debug。

看看别人的文章

到此,也学习差不多了,当然这里的差不多是指入门。实际的应用还有很多细节的问题需要不断的查找资料。现在我们就看看,别人学习Ant的情况,来Google一下。
  1. http://blog.csdn.net/pq5326/article/details/337242
  2. http://www.blogjava.net/atealxt/archive/2008/07/17/ant_study_note.html
  3. http://www.blogjava.net/bingle/archive/2007/01/23/95479.html
  4. http://lingate.iteye.com/blog/28651

自己仔细看看,有哪些自己知道了的,哪些掌握了的,哪些还需要学习的。有疑问的地方可以跟他们探讨一下。

Google时候还发现Ant方面的经典书籍《Ant Definitive Guide》这些可以作为后续的深入学习材料,或者解决问题的好帮手。

总结

如果你跟这上面的步骤进行学习,相信一定会有所地的。同时,这里面不单让你学会了Ant,更加重要的是告诉你学习一个知识点的方法。

阅读更多
个人分类: Android JAVA
想对作者说点什么? 我来说一句

Ant 脚本 教程 . pdf

2010年03月26日 17.91MB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭