解决ANT无法捕获异常的问题

使用过ant的人都知道,ant是无法捕获构建过程中抛出的异常的,确切的说,是无法拦截异常并由用户手动处理的(参考java语言的try-catch语句)。

ant算是一门经典的构建工具了,在maven出现以前,ant的霸主地位一直未被动摇。现在虽然maven抢过了ant的风头,但ant在某些操作上还是maven无法比拟的,例如文件操作、执行远程命令等。

 

公司项目中使用了maven来进行构建,但每次部署时(这里不讨论jenkins),都需要手动打包,拷贝文件到远程web容器,然后清楚web容器缓存文件,最后启动web容器(如果有人对我说热部署,我只能以呵呵回报他)。这一系列操作,恩,来个十次八次的就知道多繁琐了。

 

所以自己考虑使用ANT来进行这些操作,具体的一些细节就不讨论了,只说其中出现的引起大麻烦的“小问题”。

 

自己为了方便,都是直接把ant构建添加在鼠标右键的,这要只需要在需要构建的build.xml文件上鼠标右键即可。但是唯一美中不足的地方就是如果构建过程中出现了异常,我是没办法知道的,因为构建过程是在命令行中一闪而过的,之前自己翻阅了antAPI文档,才知道ant是没办法手动捕获异常的。

 

于是又一次有一个同事自己偷偷把maven打包生成的文件名字改了,我也不知道,在每次调试的时候继续使用ant打包,打包,打包(其实每次ant构建都是失败的)。然后发现一个代码上的问题明明解决了,但是在服务器上居然还存在相应的bug,查来查去才发现是自己一直没有把最新的代码部署上去。

 

自己的思路就是ant构建失败时,能停止构建,并在命令行中弹出“构建异常,按ENTER继续”这样的需要用户接介入的操作,而构建成功时就不显示任何信息。

 

通过再三搜索,终于找到了一个第三方的taskant-contrib,需要的jar是:ant-contrib-1.0b3.jar。这个文件可以在maven的中央仓库找到。

 

下载下来后,为了方便,可以直接将此jar放到$ANT_HOME/lib 下。

 

下面是一个使用此taskdemodemo中手动抛出了一个异常,然后拦截了异常并提示“构建异常,按ENTER继续”:

 

<?xml version="1.0"encoding="UTF-8" standalone="no"?>
<projectname="auto_test" basedir="."default="autotest.main"> 
<!--在ant脚本目录下,新建一个lib目录,把ant-contrib-1.0b3.jar放在里面 --> 
    <taskdefresource="net/sf/antcontrib/antcontrib.properties" /> 
    <targetname="autotest.main"> 
                 <trycatch property="GetBuildError" > 
<try >
    <!--****************我的任务****************************  -->
    <fail>这是一个手动抛出的异常</fail>
    <!--****************我的任务****************************  -->
</try>
<catch> 
    <echo level="error">构建错误,按Enter结束</echo>   
    <echolevel="error">${GetBuildError}</echo>  
    <input />
</catch> 
        </trycatch> 
    </target>
</project>

构建过程如下:

 

计算机生成了可选文字: 打开(O〕编辑汪〕坛t构建打开方式0f〕;使用3的杀毒扫描藉Torto,ses妞!甚w、~火佩Ocker发送到以)剪切口〕复制(C〕创建快捷方式侣〕删除印〕重命名伽)属性以)

 

计算机生成了可选文字: 默黑雀器烹洗烹只麒赎照焦一司困autote,t一nain:目[echo][echo][input]爆鲜墉潞翡蘸

 

可以看到,ant拦截到了异常并等待用户来处理。这样就不怕构建失败时不被发现了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值