import org.apache.tools.ant.Task;
import org.apache.tools.ant.BuildException;
import java.util.StringTokenizer;
import java.util.ArrayList;
import java.lang.reflect.Method;

public final class CallJavaFromAnt extends Task {
	private String cls, args;
	public void setClass(String cl) { cls=cl; }
	public void setArgs(String arg) { args=arg; }

	public void execute() throws BuildException {
		try {
			Class Cls= Class.forName(cls);

			StringTokenizer tokener= new StringTokenizer(args);
			ArrayList list= new ArrayList();
			while( tokener.hasMoreTokens())
				list.add( tokener.nextToken());
			String argv[]= new String[ list.size()];
			for(int i=0; i<list.size(); i++)
				argv[i]= (String)list.get(i);

			Class argTypes[]= { argv.getClass() };
			Object argList[]= { argv };
			Method main= Cls.getDeclaredMethod( "main", argTypes);
			main.invoke(null, argList);
		}
		catch(ClassNotFoundException ex) {
			throw new BuildException("Class " +cls+ " not found.");
		}
		catch(Exception ex) {
			ex.printStackTrace();
			throw new BuildException("Task " +cls+ " threw an exception: "+ex);
		}
	}

}