You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by Alexey Melnikoff <al...@gmail.com> on 2007/09/23 22:30:28 UTC
How to extend java task?
I've tryed to ask at user@ant.apache.org.
But I don't have answers.
I try to extend java task in two ways: extending java task, or using
ExecuteJava, but I have problems with using output and input streams.
I execute java for running class which placed in jar, this class tryes
to open output and input streams, but it can't do it.
This my code of two tryes:
FIRST implementation:
import java.io.File;
import java.util.ArrayList;
import java.util.Collection ;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.ExitStatusException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.taskdefs.ExecuteJava ;
import org.apache.tools.ant.types.Commandline;
import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.types.Reference;
public class InstallDocAppsTask extends Task {
private boolean failonerror = false;
private File docapppath;
private Reference classpathref;
private String classname;
private String docbase;
private String domain;
private String installlog;
private String username;
private String userpass;
public InstallDocAppsTask() {
super();
}
/**
* Do the execution.
*
* @throws BuildException
* if failOnError is set to true and the application returns a
* nonzero result code.
*/
public void execute() throws BuildException {
String[] files = docapppath.list();
Collection<File> dirs = new ArrayList<File>();
for (int i = 0; i < files.length; i++) {
File tmp = new File(docapppath.getAbsolutePath() + "\\" + files[i]);
if (tmp.isDirectory()) {
dirs.add(tmp);
}
}
if (dirs.size() != 0) {
int err = -1;
for (File dir : dirs) {
ExecuteJava exe = new ExecuteJava();
exe.setClasspath ((Path) classpathref.getReferencedObject());
Cmdline cmd = new Cmdline();
cmd.setExecutable(classname);
cmd.createArgument().setValue("-d " + docbase);
cmd.createArgument().setValue("-n " + username);
cmd.createArgument().setValue("-p " + userpass);
if (domain != null && domain.trim().length() != 0) {
cmd.createArgument().setValue("-m " + domain);
}
cmd.createArgument().setValue("-a " + "\"" + dir.getAbsolutePath() + "\"");
if (installlog != null && installlog.trim().length() != 0) {
cmd.createArgument().setValue("-l " + "\"" + (installlog.endsWith("\\") ?
installlog : installlog + "\\") + dir.getName() + "\"");
}
exe.setJavaCommand(cmd);
err = exe.fork(this);
if (err != 0) {
if (isFailonerror()) {
throw new ExitStatusException("Java returned: " + err, err, getLocation());
} else {
log("Java Result: " + err, Project.MSG_ERR);
}
}
}
} else {
log("Direcory " + docapppath + " does not contain subdirectories, wich may contain DocApps", Project.MSG_ERR);
}
}
public void setDocbase(String docbase) {
this.docbase = docbase;
}
public void setUsername(String username) {
this.username = username;
}
public void setUserpass(String userpass) {
this.userpass = userpass;
}
public void setDomain(String domain) {
this.domain = domain;
}
public void setInstalllog(String installlog) {
this.installlog = installlog;
}
public void setDocapppath(File docapppath) {
this.docapppath = docapppath;
}
public void setFailonerror(boolean failonerror) {
this.failonerror = failonerror;
}
public void setClasspathref(Reference classpathref) {
this.classpathref = classpathref;
}
public void setClassname(String classname) {
this.classname = classname;
}
public class Cmdline extends Commandline {
@Override
public String describeCommand() {
return "";
}
@Override
public String describeArguments() {
return "";
}
}
public boolean isFailonerror() {
return failonerror;
}
}
SECOND implementation:
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.ExitStatusException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.taskdefs.Java;
import org.apache.tools.ant.types.CommandlineJava;
import org.apache.tools.ant.types.Reference;
public class InstallDocAppsTask extends Java {
private boolean failonerror = false;
private File docapppath;
private Reference classpathref;
private String classname;
private String docbase;
private String domain;
private String installlog;
private String username;
private String userpass;
private Cmdline cmdl = new Cmdline();
public InstallDocAppsTask() {
super();
}
/**
* Do the execution.
*
* @throws BuildException
* if failOnError is set to true and the application
returns a
* nonzero result code.
*/
public void execute() throws BuildException {
String[] files = docapppath.list();
Collection<File> dirs = new ArrayList<File>();
for (int i = 0; i < files.length; i++) {
File tmp = new File(docapppath.getAbsolutePath() + "\\" +
files[i]);
if (tmp.isDirectory()) {
dirs.add(tmp);
}
}
if (dirs.size() != 0) {
int err = -1;
for (File dir : dirs) {
Cmdline cmd = new Cmdline();
cmd.setClassname(classname);
cmd.createClasspath(getProject()).createPath().setRefid(classpathref);
cmd.createArgument().setValue("-d " + docbase);
cmd.createArgument().setValue("-n " + username);
cmd.createArgument().setValue("-p " + userpass);
if (domain != null && domain.trim().length() != 0) {
cmd.createArgument().setValue("-m " + domain);
}
cmd.createArgument().setValue("-a " + "\"" +
dir.getAbsolutePath() + "\"");
if (installlog != null && installlog.trim().length() != 0) {
cmd.createArgument().setValue("-l " + "\"" +
(installlog.endsWith("\\") ?
installlog : installlog +
"\\") + dir.getName() + "\"");
}
setCommandLine(cmd);
err = executeJava();
if (err != 0) {
if (isFailonerror()) {
throw new ExitStatusException("Java returned: "
+ err,
err, getLocation());
} else {
log("Java Result: " + err, Project.MSG_ERR);
}
}
}
} else {
log("Direcory " + docapppath + " does not contain
subdirectories, wich may contain DocApps", Project.MSG_ERR);
}
}
public void setDocbase(String docbase) {
this.docbase = docbase;
}
public void setUsername(String username) {
this.username = username;
}
public void setUserpass(String userpass) {
this.userpass = userpass;
}
public void setDomain(String domain) {
this.domain = domain;
}
public void setInstalllog(String installlog) {
this.installlog = installlog;
}
public void setDocapppath(File docapppath) {
this.docapppath = docapppath;
}
public void setFailonerror(boolean failonerror) {
this.failonerror = failonerror;
}
public void setClasspathrefId(Reference classpathref) {
this.classpathref = classpathref;
}
public void setClassname(String classname) {
this.classname = classname;
}
public class Cmdline extends CommandlineJava {
@Override
public String describeCommand() {
return "";
}
}
public boolean isFailonerror() {
return failonerror;
}
public Cmdline getCommandLine() {
return cmdl;
}
public void setCommandLine(Cmdline cmdline) {
this.cmdl = cmdline;
}
}
In all cases I've problem with opening streams, running class can't
create file, and can't get user input.
But when I simply use java task all works fine.
Where in my code errors?
Sorry for my bad English.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org