服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

java的build工具―ant应用指南(3)


  java的build工具―ant应用指南(3)

在自己的程序中调用ant

ant的任务其实就是一段功能代码。ant内置的大量任务对于我们开发java应用具有非常大的意义,为什么我们不能直接使用呢?

因为尽管在程序中调用ant的任务并不复杂,而且我们知道ant的任务其实都是一些java类,调用的方法无非就是执行这些类而已,不过在执行之前需要对它做一些初始化的工作,所以我们需要引用一个task类的子类来实现这个功能,比如如下代码:

package com.sharetop.antdemo;
import org.apache.tools.ant.*;
import org.apache.tools.ant.taskdefs.*;
import java.io.file;
public class runanttask {
public runanttask() {
}
public static void main(string args[]){
antjar j = new antjar();
j.setbasedir(new file("./classes"));
j.setjarfile(new file("aaa.jar"));
j.execute();
}
}
final class antjar extends jar {
public antjar() {
project = new project();
project.init();
tasktype = "jar";
taskname = "jar";
}
}

注意antjar类的构造方法,先创建了project并初始化它,这是直接调用task的必需条件。

如果要在自己的程序中执行ant,需要了解的是ant定义的几个buildevent,它包括:

◆ build started

◆ build finished

◆ target started

◆ target finished

◆ task started

◆ task finished

◆ message logged

我们需要做的是实现buildlistener接口来处理各种事件,而执行ant的方法与上面给的例子非常类似,以实际开发的antbuilder软件的部分代码为例:

public void buildtarget(string targetname,string buildfilename) {
try {
project p = new project();
p.init();
file f = new file(buildfilename);
p.setuserproperty("ant.file",f.getabsolutepath());
projecthelper.configureproject(p,f);
p.addbuildlistener(this);
if( targetname==null )
p.executetarget(p.getdefaulttarget());
else
p.executetarget(targetname);
}
catch (exception ex) {
jtextarea1.append(ex.getmessage());
}
}

创建project并初始化,设置它的配置文件(build.xml),执行它缺省的或指定的target,然后在实现了buildlistenser接口的监听器类中对你感兴趣的事件作处理,代码如下:

public void buildstarted(buildevent event){ /* nothing*/ }
public void buildfinished(buildevent event) { /* nothing*/ }
public void targetstarted(buildevent event) {
this.jtextarea1.append(event.gettarget().getname()+": /n/r");
}
public void targetfinished(buildevent event) {/* nothing*/ }
public void taskstarted(buildevent event) {/* nothing*/ }
public void taskfinished(buildevent event) { /* nothing*/ }
public void messagelogged(buildevent event) {
int prior = event.getpriority();
switch(prior){
case project.msg_err :
this.jtextarea1.append("["+event.gettask().gettaskname()+"]err:"
+event.getmessage());
break;
case project.msg_info:
this.jtextarea1.append("["+event.gettask().gettaskname()+"]"+event.getmessage
());
break;
case project.msg_warn:
this.jtextarea1.append("["+event.gettask().gettaskname()+"]"
+event.getmessage());
break;
case project.msg_verbose:
this.jtextarea1.append(event.getmessage());
break;
}
}

build.xml文件的写法每个公司都有不同,这里没有太大的参考价值,所以略去。(全文完)

扫描关注微信公众号