Ant的几个要点

说到Ant,是有一点过时了,现在maven已经被广泛使用。

但是作为一个老牌的build工具,Ant在现存项目中仍然被广泛使用着。所以学习它也是在所难免的。


官方使用手册:

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

一个不错的学习ant的网站。我的这篇文章不是ant入门,所以强烈建议没入门的同学从这个网站开始:

http://www.exubero.com/ant/antintro-s5.html


1,Ant是Apache的开源项目

2,Ant的表现形式是XML格式的Ant script,里面由一系列顺序执行的“command”组成。所有Ant有一套自己的语法,但是非常简单直接。

3,Ant是用java编写的。它本质上就是一个java程序,将XML格式的Ant script解释成实际的java程序后,运行。

有时Ant运行出错时,可以看到低层程序抛出的java异常。


Ant script是XML的格式。它的组成要素是:

project

target -- a tartget is a set of tasks you want to execute.  you also can select which targets you want to execute when starting Ant

task

property--property是immutable的。可以把property理解成string constant,字符常量,而不是变量。一旦定义好这个字符变量后,就可以在后面的task中使用了。

Ant已经定义好了一系列的build-in properties可以直接使用。

1,例如${os.name}, 其实就是java中提供的getProperties方法提供的变量。

2,此外Ant还额外提供了一些properties。

<property file="..\project.properties" /> 我们会经常需要从一个配置文件load一系列的properties进来。

<property environment="env"/> 也会经常需要使用环境变量。

当我们在使用cruisecontrol或jenkins调用ant时,也许在ant脚本里需要使用一些环境变量,例如JENKINS_HOME。

Jenkins会将一些类似JENKINS_HOME设置为环境变量,然后ant中就可以用上句接收这些环境变量了。


path--这个在后面解释

  • 编辑工具

Ant脚本是XML的形式,可以方便的 用文本编辑器编辑。因此Ant没有专门的编辑工具或IDE。

Notepad++就是一个不错的编辑工具,结合它自身的全文搜索功能,高亮关键字功能等,可以在理解逻辑关系,编写脚本时省去不少麻烦。

但是在编辑复杂Ant脚本时仍然会遇到很多问题:

1,有时逻辑上的跳转太厉害,看一会儿就晕了。

2,无法debug。

ant执行出错时,会返回出错的代码行数,而且很准确。同时有时也会抛出低层的java异常。

因此根据ant log判断问题所在并不是很困难。

但是不能debug,仍然会经常导致难以判断问题所在。例如虽然看起来是某行代码出错,但实际上是另外代码引起的。此类问题完全只能靠经验和阅读ant log判断。

3,在阅读ant脚本时,当遇到非core task时,常常不知道是哪个插件的功能。

例如在ant中看到shellscript task,这不是一个ant提供的标准功能,也无法直接得知这是哪个第三方工具提供的功能。

但是绝大多数IDE都集成了ant。例如在eclipse中运行,debug ant script非常方便:

1,在eclipse中open file->选择打开一个build.xml。

2,此时eclipse的outline会显示出ant script的结构。

3,右击其中任何一个结构体,例如target,就可以看到run as ant build或debug as ant build了。点击即可运行。


  • 运行

要运行Ant非常简单,直接在命令行里运行即可。

ant [options] [target-names]

例如:ant run targetname

  • 插件

在插件方面,ant无法和maven相比。但ant仍然有一些第三方工具被大量使用。

查看有哪些插件:

http://ant.apache.org/external.html#IDE%20and%20Editor%20Integration

大家知道ant有很多core-task,而插件则提供了更多了tasks,可在Ant script中使用。


1,首先需要把第三方类库的jar文件都copy到一个目录下。如/lib

2,其次在Ant script中加入以下语句。此时path的作用就很清楚了,其实就是告诉ant应该去哪里找jar文件。和classpath的作用一样。

<property name="lib.dir"     value="lib"/>
<path id="project.classpath">
   <fileset dir="${lib.dir}" includes="**/*.jar"/>
</path>

3,最后定义要使用的第三方类库,注意classpathref的值就是我们刚刚定义的path id。
<taskdef resource="net/sf/antcontrib/antlib.xml" classpathref="project.classpath"/>
    <taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask" classpathref="project.classpath"/>
    <taskdef uri="jwaresoftware.antxtras" resource="org/jwaresoftware/antxtras/install/antlib.xml" classpathref="project.classpath" />

4,然后在ant script中就可以方便的使用除了ant的core-task以外的其他tasks了。


需要注意的是:如果在ant中运行一个程序,例如自己写的helloworld,其中使用了log4j类库,则需要将log4j的jar加入到/lib下才能运行。

因为path的作用就是运行java程序时的classpath。不要试图去修改CLASSPATH环境变量,这是关于使用ant的最著名的一个误区。

所以ant插件的本质就是:ant定义了一系列的接口,插件是符合这些接口的java程序。当使用taskdef调用这些第三方java程序时,ant会自动load这些jar文件,之后用户就可以在ant script中使用这些插件提供的方法了。


我见到的工具之一ant contrib:

http://ant-contrib.sourceforge.net/tasks/tasks/index.html

其中的trycatch和shellscript很有用。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值