在Java中使用ANT,简单例子

ANT这个工具相信很多人都用过,在Java的代码编译打包这方面采用ANT来自动处理是非常方便的,关于ANT本身的介绍和使用,大家可以在网上找一下,有很多说明,这里不再重复。
重点来讲一下如何直接在Java代码中调用ANT,这样的好处是我们可以将ANT的各个功能同我们自己的软件紧密的结合在一起,不需要单独配置ANT,直接在Java代码中调用,非常方便。

1:基本环境,建议用Eclipse这个工具来做为Java的基本开发工具,用Eclipse的向导新建一个Java工程test。

2:将ANT的以下几个jar文件添加到刚才新建的test工程的构建引用路径下面,即添加到classpath中去:ant-lanucher.jar、ant.jar、ant-jakarta-log4j.jar这三个jar文件是最基本的,必须添加进去,如果要用到ANT的一些其它类,需要添加相应的jar文件,具体可以参考ANT的帮助文件。这三个文件简单说明一下,ant-lanucher.jar里面的类是ANT程序启动时必须要用到的,在Java代码中调ANT时,是需要通过这个包中的类来启动ANT里面的类去执行定义的动作,这个包是启动入口类; ant.jar这个包里面是ant定义的一些核心功能类的class,如copy文件,删除文件,执行数据库脚本,打包等等,即是具体的核心功能实现类,如果是一些附加的ant功能,则在其它jar包里面,这个只有非常核心的类在里面; ant-jakarta-log4j.jar是ant重新包装了log4j的类,实现ANT自己格式的log4j的日志文件记录。

3:在test工程里面新建一个类,类里面增加一个Java的main方法,在main方法中添加如下代码,并导入相关的package:
PrintStream logstream = null; //这里是定义一个ANT执行时日志文件的输出流对象
Project pj=new Project(); //初始化一个ant的Project对象
pl.setName("ant_project"); //设置project的名称,具体的值可以随意改成其它字符串都可以
pj.init(); //ANT自己的方法初始化Project对象

DefaultLogger cl=new DefaultLogger();
//定义一个默认的日志流,默认的日志流是采用log4j来记录的,所以在前面要求将ant-jakarta-log4j.jar这个文件加到classpath中去。
logstream=new PrintStream(new FileOutputStream("C:/test.log"),true);
//下面两行是设置ANT执行过程中要输出的一些信息流,必须设置,否则后面将得不到具体的日志消息
cl.setErrorPrintStream(logstream);
cl.setOutputPrintStream(logstream);
//设置ANT记录日志的消息级别,MSG_VERBOSE是表示记录详细的日志消息
cl.setMessageOutputLevel(Project.MSG_VERBOSE);
//将前面定义好的消息记录器绑定到Project上
pj.addBuildListenter(cl);

//生成一个Target对象,为后面添加具体的Task做准备
Target tg=new Target();
tg.setProject(pj); //设置target的Project归属,必须设置,Target必须属于某一个Project
tg.setName("target1"); //设置Target的名称
pj.addTarget(tg); //将Target添加到Project中

Copy cp=new Copy(); //具体生成一个功能Task类对象,复制文件的对象
cp.setTodir(new File("C:/bbb")); //设置要将文件复制的目的地
FileSet set=new FileSet(); //定义目录集,这样在后面可以自己定义一些规则
set.setDir(new File("C:/aaa")); //定义目录集关联的实际目录路径
set.createInclude().setName("**/*.txt"); //设置这个目录集包括的规则,即这个目录下面所有的.txt后缀的文件
cp.addFileset(set); //将目录集绑定到具体的对象中
cp.setOverwrite(true);//设置在复制文件时,如果目标文件己经存在,将采用直接覆盖的方式
cp.setFailOnError(true); //设置在复制文件过程中有文件复制失败时,则中断执行这个过程
cp.setPreserveLastModified(true); //设置复制文件时保留文件的最后修改时间
cp.setProject(pj); //设置Task的Project归属
cp.setTaskName("cp"); //设置Task的名称
tg.addTask(cp); //将Task添加到Target中,Task不能单独存在,也不能直接添加到Project中

Throwable ta=null;
try {
pj.executeTarget(tg.getName()); //开始执行Project中指定的Target
}catch (Exception e){
ta=e;
} finally {
/* 在日志文件当中生成执行成功或失败的消息,调用这个方法后,如果ANT的Project执行成功,则会在日志文件当中生成一行“BUILD SUCCESSFUL”或"BUILD FAILED"这样的字符串,在执行失败时,同时会将异常消息打印在日志文件中,所以这个方法比较重要 */
pj.fireBuildFinished(ta);
logstream.close();
}

程序的主体内容就是这样的,大家可以自己去测试一下,有问题时尽量多看看ANT的帮助手册,其它ANT的帮助手册真的是很完整的,基本上我们需要的东西在里面都是可以找到的。

ANT本身己有的核心功能基本上能满足我们大部分的功能需求,有些时候可能需要我们去继承它的类,然后根据自己的业务逻辑增加相应的处理过程和方法,这里也不做说明,建议还是多看一下帮助手册,这里只是讲一下如果在Java代码中直接调用ANT。

xml例子:
<?xml version="1.0" encoding="UTF-8"?>
<project name="lee_ant_test1" default="run" basedir=".">
<property name="src" value="."/>
<property name="dest" value="classes"/>
<property name="ant_test1_jar" value="ant_test.jar"/>
<target name="init">
<mkdir dir="${dest}" />
</target>

<target name="compile" depends="init">
<javac srcdir="${src}" destdir="${dest}"/>
</target>

<target name="build" depends="compile">
<jar jarfile="${ant_test_jar}" basedir="${dest}"/>
</target>

<target name="run" depends="build">
<java classname="Ant_test" classpath="${dest}"/>
</target>

<target name="clean">
<delete dir="${dest}"/>
<delete file="${ant_test_jar}" />
</target>

<target name="return" depends="clean,run">
<ant target="clean"/>
<ant target="run"/>
</target>

</project>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值