blob: 5f26e6b6fe0c9b016944eb4ab64f1ad7034d969f [file] [log] [blame]
/* Copyright (c) 2000 The Apache Software Foundation */
package org.apache.tools.ant.cmdline;
import java.io.*;
import java.net.*;
import java.util.*;
import org.apache.tools.ant.*;
/**
* Runs the command line version of ant. Takes a list of
* fully qualified targets and builds them.
* Any jars in the "tasks" directory will be automatically added
* to the project path.
*
* @author <a href="mailto:mpfoemme@thoughtworks.com">Matthew Foemmel</a>
*/
public class Main {
/**
* Builds the specified targets.
*/
public static void main(String[] args) {
File installDir = findInstallDir();
setupProjectPath(installDir);
Importer importer = loadImporter(installDir);
Workspace workspace = new Workspace(importer);
workspace.addBuildListener(new DefaultLogger(System.out));
List targets = Arrays.asList(args);
try {
if (workspace.build(targets)) {
System.exit(0);
}
else {
System.exit(1);
}
}
catch(Exception exc) {
exc.printStackTrace();
System.exit(2);
}
}
/**
* Finds the ant.jar file in the classpath.
*/
private static File findInstallDir() {
StringTokenizer itr = new StringTokenizer(
System.getProperty("java.class.path"),
System.getProperty("path.separator"));
while (itr.hasMoreTokens()) {
File file = new File(itr.nextToken());
if (file.getName().equals("ant.jar")) {
// Found it
File dir = file.getParentFile();
if (dir == null) {
dir = new File(".");
}
return dir;
}
}
System.err.println("Unable to locate ant.jar");
System.exit(1);
return null;
}
/**
* Locates the "tasks" directory relative to the ant.jar file.
*/
private static void setupProjectPath(File installDir) {
StringBuffer path = new StringBuffer(System.getProperty("ant.project.path", "."));
File taskDir = new File(installDir, "tasks");
if (taskDir.exists()) {
File[] taskjars = taskDir.listFiles();
for (int i = 0; i < taskjars.length; i++) {
path.append(System.getProperty("path.separator"));
path.append(taskjars[i].getPath());
}
}
System.setProperty("ant.project.path", path.toString());
System.out.println(path.toString());
}
/**
* Creates a class loader using the jars from the "xml" directory, and
* loads the XmlImporter class.
*/
private static Importer loadImporter(File installDir) {
File xmlDir = new File(installDir, "xml");
if (xmlDir.exists()) {
File[] xmlJars = xmlDir.listFiles();
URL[] urls = new URL[xmlJars.length];
for (int i = 0; i < xmlJars.length; i++) {
try {
urls[i] = xmlJars[i].toURL();
}
catch(MalformedURLException exc) {
exc.printStackTrace();
}
}
try {
URLClassLoader loader = new URLClassLoader(urls);
return (Importer) loader.loadClass("org.apache.tools.ant.xml.XmlImporter").newInstance();
}
catch(Exception exc) {
exc.printStackTrace();
System.exit(1);
}
}
else {
System.err.println("Unable to find xml directory");
System.exit(1);
}
return null;
}
}