blob: eaed496ce2202108acf142e2d20965dbee4dfa3f [file] [log] [blame]
/* Copyright (c) 2000 The Apache Software Foundation */
package org.apache.tools.ant.tasks;
import java.lang.reflect.*;
import java.io.*;
import java.util.*;
import org.apache.tools.ant.*;
public class Javac extends Task {
private Fileset[] fileset;
private String dest;
private String classpath;
private String compilerclass = null;
public void execute() throws BuildException {
if (compilerclass == null) {
compilerclass = "com.sun.tools.javac.Main";
}
List argList = new ArrayList();
argList.add("-d");
argList.add(dest);
if (classpath != null) {
argList.add("-classpath");
// Replace the project's path separator with the system's path separator
argList.add(classpath.replace(getProject().getPathSeparator(), File.pathSeparatorChar));
}
for (int i = 0; i < fileset.length; i++) {
fileset[i].getFiles(argList);
}
String[] args = (String[]) argList.toArray(new String[argList.size()]);
try {
new File(dest).mkdirs();
Class type = getClass().getClassLoader().loadClass(compilerclass);
Method method = type.getMethod("main", new Class[] { args.getClass() });
getWorkspace().info("Running javac...");
method.invoke(null, new Object[] { args });
}
catch(InvocationTargetException exc) {
Throwable cause = exc.getTargetException();
if (cause instanceof ExitException) {
if (((ExitException)cause).getStatus() != 0) {
throw new BuildException("Compile failed");
}
}
else {
throw new AntException("Error running compiler", exc);
}
}
catch(ClassNotFoundException exc) {
throw new BuildException("Compiler class not found. Makes sure tools.jar is in your classpath");
}
catch(IllegalAccessException exc) {
throw new AntException("Unable to access compiler class", exc);
}
catch(NoSuchMethodException exc) {
throw new AntException("Unable to find main method on compiler class", exc);
}
}
public String getDest() {
return dest;
}
public void setDest(String dest) {
this.dest = dest;
}
public String getClasspath() {
return classpath;
}
public void setClasspath(String classpath) {
this.classpath = classpath;
}
public Fileset[] getFileset() {
return fileset;
}
public void setFileset(Fileset[] fileset) {
this.fileset = fileset;
}
}