blob: 315e91c5e2889f98e46832ffec5bf2c5410e3658 [file] [log] [blame]
/* Copyright (c) 2000 The Apache Software Foundation */
package org.apache.tools.ant.tasks;
import java.io.*;
import java.lang.reflect.*;
import java.util.*;
import org.apache.tools.ant.*;
public class Jar extends Task {
private String jarfile;
private String basedir;
private String manifest;
public String getJarfile() {
return jarfile;
}
public void setJarfile(String jarfile) {
this.jarfile = jarfile;
}
public String getBasedir() {
return basedir;
}
public void setBasedir(String basedir) {
this.basedir = basedir;
}
public String getManifest() {
return manifest;
}
public void setManifest(String manifest) {
this.manifest = manifest;
}
public void execute() throws BuildException {
File dir = new File(jarfile).getParentFile();
if (dir != null) {
dir.mkdirs();
}
List argList = new ArrayList();
if (manifest == null) {
argList.add("-cf");
}
else {
argList.add("-cmf");
argList.add(manifest);
}
argList.add(jarfile);
argList.add("-C");
argList.add(basedir);
argList.add(".");
String[] args = (String[]) argList.toArray(new String[argList.size()]);
try {
Class type = getClass().getClassLoader().loadClass("sun.tools.jar.Main");
Method method = type.getMethod("main", new Class[] { args.getClass() });
getWorkspace().info("Running jar...");
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("Build failed");
}
}
else {
throw new AntException("Error running jar", exc);
}
}
catch(ClassNotFoundException exc) {
throw new AntException("Jar class not found. Makes sure tools.jar is in your classpath");
}
catch(Exception exc) {
throw new AntException("Error running jar", exc);
}
}
}