git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@270682 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -8,14 +8,13 @@ | |||
| package org.apache.tools.ant.taskdefs; | |||
| import java.io.File; | |||
| import java.io.FileOutputStream; | |||
| import java.io.IOException; | |||
| import java.io.PrintStream; | |||
| import java.util.ArrayList; | |||
| import org.apache.myrmidon.api.TaskException; | |||
| import org.apache.myrmidon.api.AbstractTask; | |||
| import org.apache.tools.ant.Task; | |||
| import org.apache.tools.ant.taskdefs.exec.Execute; | |||
| import org.apache.tools.ant.taskdefs.exec.LogOutputStream; | |||
| import org.apache.tools.ant.taskdefs.exec.Execute2; | |||
| import org.apache.tools.ant.types.Argument; | |||
| import org.apache.tools.ant.types.CommandlineJava; | |||
| import org.apache.tools.ant.types.EnvironmentVariable; | |||
| @@ -29,41 +28,29 @@ import org.apache.tools.ant.types.Path; | |||
| * stefano@apache.org</a> | |||
| * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | |||
| */ | |||
| public class Java extends Task | |||
| public class Java | |||
| extends AbstractTask | |||
| { | |||
| private CommandlineJava cmdl = new CommandlineJava(); | |||
| private boolean fork = false; | |||
| private File dir = null; | |||
| private PrintStream outStream = null; | |||
| private boolean failOnError = false; | |||
| private File out; | |||
| private CommandlineJava m_cmdl = new CommandlineJava(); | |||
| private boolean m_fork; | |||
| private File m_dir; | |||
| private PrintStream m_outStream; | |||
| /** | |||
| * Set the class name. | |||
| * | |||
| * @param s The new Classname value | |||
| * @exception TaskException Description of Exception | |||
| */ | |||
| public void setClassname( String s ) | |||
| throws TaskException | |||
| { | |||
| if( cmdl.getJar() != null ) | |||
| { | |||
| throw new TaskException( "Cannot use 'jar' and 'classname' attributes in same command" ); | |||
| } | |||
| cmdl.setClassname( s ); | |||
| m_cmdl.setClassname( s ); | |||
| } | |||
| /** | |||
| * Set the classpath to be used for this compilation. | |||
| * | |||
| * @param s The new Classpath value | |||
| */ | |||
| public void setClasspath( Path s ) | |||
| public void setClasspath( final Path classpath ) | |||
| throws TaskException | |||
| { | |||
| createClasspath().append( s ); | |||
| createClasspath().append( classpath ); | |||
| } | |||
| /** | |||
| @@ -71,145 +58,83 @@ public class Java extends Task | |||
| * | |||
| * @param d The new Dir value | |||
| */ | |||
| public void setDir( File d ) | |||
| public void setDir( final File dir ) | |||
| { | |||
| this.dir = d; | |||
| } | |||
| /** | |||
| * Throw a TaskException if process returns non 0. | |||
| * | |||
| * @param fail The new Failonerror value | |||
| */ | |||
| public void setFailonerror( boolean fail ) | |||
| { | |||
| failOnError = fail; | |||
| m_dir = dir; | |||
| } | |||
| /** | |||
| * Set the forking flag. | |||
| * | |||
| * @param s The new Fork value | |||
| */ | |||
| public void setFork( boolean s ) | |||
| public void setFork( final boolean fork ) | |||
| { | |||
| this.fork = s; | |||
| m_fork = fork; | |||
| } | |||
| /** | |||
| * set the jar name... | |||
| * | |||
| * @param jarfile The new Jar value | |||
| * @exception TaskException Description of Exception | |||
| */ | |||
| public void setJar( File jarfile ) | |||
| throws TaskException | |||
| public void setJar( final File jar ) | |||
| { | |||
| if( cmdl.getClassname() != null ) | |||
| { | |||
| throw new TaskException( "Cannot use 'jar' and 'classname' attributes in same command." ); | |||
| } | |||
| cmdl.setJar( jarfile.getAbsolutePath() ); | |||
| m_cmdl.setJar( jar.getAbsolutePath() ); | |||
| } | |||
| /** | |||
| * Set the command used to start the VM (only if fork==false). | |||
| * | |||
| * @param s The new Jvm value | |||
| */ | |||
| public void setJvm( String s ) | |||
| public void setJvm( final String jvm ) | |||
| { | |||
| cmdl.setVm( s ); | |||
| m_cmdl.setVm( jvm ); | |||
| } | |||
| /** | |||
| * -mx or -Xmx depending on VM version | |||
| * | |||
| * @param max The new Maxmemory value | |||
| */ | |||
| public void setMaxmemory( String max ) | |||
| { | |||
| cmdl.setMaxmemory( max ); | |||
| } | |||
| /** | |||
| * File the output of the process is redirected to. | |||
| * | |||
| * @param out The new Output value | |||
| */ | |||
| public void setOutput( File out ) | |||
| public void setMaxmemory( final String max ) | |||
| { | |||
| this.out = out; | |||
| m_cmdl.setMaxmemory( max ); | |||
| } | |||
| /** | |||
| * Add a nested sysproperty element. | |||
| * | |||
| * @param sysp The feature to be added to the Sysproperty attribute | |||
| */ | |||
| public void addSysproperty( EnvironmentVariable sysp ) | |||
| public void addSysproperty( final EnvironmentVariable sysp ) | |||
| { | |||
| cmdl.addSysproperty( sysp ); | |||
| } | |||
| /** | |||
| * Clear out the arguments to this java task. | |||
| */ | |||
| public void clearArgs() | |||
| { | |||
| cmdl.clearJavaArgs(); | |||
| m_cmdl.addSysproperty( sysp ); | |||
| } | |||
| /** | |||
| * Creates a nested arg element. | |||
| * | |||
| * @return Description of the Returned Value | |||
| */ | |||
| public Argument createArg() | |||
| { | |||
| return cmdl.createArgument(); | |||
| return m_cmdl.createArgument(); | |||
| } | |||
| /** | |||
| * Creates a nested classpath element | |||
| * | |||
| * @return Description of the Returned Value | |||
| */ | |||
| public Path createClasspath() | |||
| throws TaskException | |||
| { | |||
| return cmdl.createClasspath().createPath(); | |||
| return m_cmdl.createClasspath().createPath(); | |||
| } | |||
| /** | |||
| * Creates a nested jvmarg element. | |||
| * | |||
| * @return Description of the Returned Value | |||
| */ | |||
| public Argument createJvmarg() | |||
| { | |||
| return cmdl.createVmArgument(); | |||
| return m_cmdl.createVmArgument(); | |||
| } | |||
| /** | |||
| * Do the execution. | |||
| * | |||
| * @exception TaskException Description of Exception | |||
| */ | |||
| public void execute() | |||
| throws TaskException | |||
| { | |||
| int err = -1; | |||
| if( ( err = executeJava() ) != 0 ) | |||
| final int err = executeJava(); | |||
| if( 0 != err ) | |||
| { | |||
| if( failOnError ) | |||
| { | |||
| throw new TaskException( "Java returned: " + err ); | |||
| } | |||
| else | |||
| { | |||
| getLogger().error( "Java Result: " + err ); | |||
| } | |||
| throw new TaskException( "Java returned: " + err ); | |||
| } | |||
| } | |||
| @@ -223,188 +148,107 @@ public class Java extends Task | |||
| public int executeJava() | |||
| throws TaskException | |||
| { | |||
| String classname = cmdl.getClassname(); | |||
| if( classname == null && cmdl.getJar() == null ) | |||
| final String classname = m_cmdl.getClassname(); | |||
| final String jar = m_cmdl.getJar(); | |||
| if( classname != null && jar != null ) | |||
| { | |||
| throw new TaskException( "Only one of Classname and Jar can be set." ); | |||
| } | |||
| else if( classname == null && jar == null ) | |||
| { | |||
| throw new TaskException( "Classname must not be null." ); | |||
| } | |||
| if( !fork && cmdl.getJar() != null ) | |||
| if( !m_fork && jar != null ) | |||
| { | |||
| throw new TaskException( "Cannot execute a jar in non-forked mode. Please set fork='true'. " ); | |||
| } | |||
| if( fork ) | |||
| if( m_fork ) | |||
| { | |||
| getLogger().debug( "Forking " + cmdl.toString() ); | |||
| getLogger().debug( "Forking " + m_cmdl.toString() ); | |||
| return run( cmdl.getCommandline() ); | |||
| return run( m_cmdl.getCommandline() ); | |||
| } | |||
| else | |||
| { | |||
| if( cmdl.getVmCommand().size() > 1 ) | |||
| if( m_cmdl.getVmCommand().size() > 1 ) | |||
| { | |||
| getLogger().warn( "JVM args ignored when same JVM is used." ); | |||
| } | |||
| if( dir != null ) | |||
| if( m_dir != null ) | |||
| { | |||
| getLogger().warn( "Working directory ignored when same JVM is used." ); | |||
| } | |||
| getLogger().debug( "Running in same VM " + cmdl.getJavaCommand().toString() ); | |||
| run( cmdl ); | |||
| getLogger().debug( "Running in same VM " + m_cmdl.getJavaCommand().toString() ); | |||
| run( m_cmdl ); | |||
| return 0; | |||
| } | |||
| } | |||
| protected void handleErrorOutput( String line ) | |||
| { | |||
| if( outStream != null ) | |||
| { | |||
| outStream.println( line ); | |||
| } | |||
| else | |||
| { | |||
| super.handleErrorOutput( line ); | |||
| } | |||
| } | |||
| protected void handleOutput( String line ) | |||
| { | |||
| if( outStream != null ) | |||
| { | |||
| outStream.println( line ); | |||
| } | |||
| else | |||
| { | |||
| super.handleOutput( line ); | |||
| } | |||
| } | |||
| /** | |||
| * Executes the given classname with the given arguments as it was a command | |||
| * line application. | |||
| * | |||
| * @param classname Description of Parameter | |||
| * @param args Description of Parameter | |||
| * @exception TaskException Description of Exception | |||
| */ | |||
| protected void run( String classname, ArrayList args ) | |||
| protected void run( final String classname, final ArrayList args ) | |||
| throws TaskException | |||
| { | |||
| CommandlineJava cmdj = new CommandlineJava(); | |||
| cmdj.setClassname( classname ); | |||
| for( int i = 0; i < args.size(); i++ ) | |||
| final CommandlineJava java = new CommandlineJava(); | |||
| java.setClassname( classname ); | |||
| final int size = args.size(); | |||
| for( int i = 0; i < size; i++ ) | |||
| { | |||
| cmdj.createArgument().setValue( (String)args.get( i ) ); | |||
| final String arg = (String)args.get( i ); | |||
| java.createArgument().setValue( arg ); | |||
| } | |||
| run( cmdj ); | |||
| run( java ); | |||
| } | |||
| /** | |||
| * Executes the given classname with the given arguments as it was a command | |||
| * line application. | |||
| * | |||
| * @param command Description of Parameter | |||
| * @exception TaskException Description of Exception | |||
| */ | |||
| private void run( CommandlineJava command ) | |||
| private void run( final CommandlineJava command ) | |||
| throws TaskException | |||
| { | |||
| ExecuteJava exe = new ExecuteJava(); | |||
| final ExecuteJava exe = new ExecuteJava(); | |||
| exe.setJavaCommand( command.getJavaCommand() ); | |||
| exe.setClasspath( command.getClasspath() ); | |||
| exe.setSystemProperties( command.getSystemProperties() ); | |||
| if( out != null ) | |||
| { | |||
| try | |||
| { | |||
| outStream = new PrintStream( new FileOutputStream( out ) ); | |||
| exe.execute( getProject() ); | |||
| } | |||
| catch( IOException io ) | |||
| { | |||
| throw new TaskException( "Error", io ); | |||
| } | |||
| finally | |||
| { | |||
| if( outStream != null ) | |||
| { | |||
| outStream.close(); | |||
| } | |||
| } | |||
| } | |||
| else | |||
| { | |||
| exe.execute( getProject() ); | |||
| } | |||
| exe.execute(); | |||
| } | |||
| /** | |||
| * Executes the given classname with the given arguments in a separate VM. | |||
| * | |||
| * @param command Description of Parameter | |||
| * @return Description of the Returned Value | |||
| * @exception TaskException Description of Exception | |||
| */ | |||
| private int run( String[] command ) | |||
| private int run( final String[] command ) | |||
| throws TaskException | |||
| { | |||
| FileOutputStream fos = null; | |||
| try | |||
| { | |||
| Execute exe = null; | |||
| if( out == null ) | |||
| { | |||
| exe = new Execute(); | |||
| exe.setOutput( new LogOutputStream( getLogger(), false ) ); | |||
| exe.setError( new LogOutputStream( getLogger(), true ) ); | |||
| } | |||
| else | |||
| { | |||
| fos = new FileOutputStream( out ); | |||
| exe = new Execute(); | |||
| exe.setOutput( fos ); | |||
| exe.setError( fos ); | |||
| } | |||
| if( dir == null ) | |||
| { | |||
| dir = getBaseDirectory(); | |||
| } | |||
| else if( !dir.exists() || !dir.isDirectory() ) | |||
| { | |||
| throw new TaskException( dir.getAbsolutePath() + " is not a valid directory" ); | |||
| } | |||
| exe.setWorkingDirectory( dir ); | |||
| final Execute2 exe = new Execute2(); | |||
| setupLogger( exe ); | |||
| exe.setCommandline( command ); | |||
| try | |||
| { | |||
| return exe.execute(); | |||
| } | |||
| catch( IOException e ) | |||
| { | |||
| throw new TaskException( "Error", e ); | |||
| } | |||
| if( m_dir == null ) | |||
| { | |||
| m_dir = getBaseDirectory(); | |||
| } | |||
| catch( IOException io ) | |||
| else if( !m_dir.exists() || !m_dir.isDirectory() ) | |||
| { | |||
| throw new TaskException( "Error", io ); | |||
| final String message = m_dir.getAbsolutePath() + " is not a valid directory"; | |||
| throw new TaskException( message ); | |||
| } | |||
| finally | |||
| exe.setWorkingDirectory( m_dir ); | |||
| exe.setCommandline( command ); | |||
| try | |||
| { | |||
| if( fos != null ) | |||
| { | |||
| try | |||
| { | |||
| fos.close(); | |||
| } | |||
| catch( IOException io ) | |||
| { | |||
| } | |||
| } | |||
| return exe.execute(); | |||
| } | |||
| catch( IOException e ) | |||
| { | |||
| final String message = "Error executing class"; | |||
| throw new TaskException( message, e ); | |||
| } | |||
| } | |||
| } | |||
| @@ -198,7 +198,7 @@ public class BorlandGenerateClient extends Task | |||
| getLogger().info( "mode : java" ); | |||
| org.apache.tools.ant.taskdefs.Java execTask = null; | |||
| execTask = (Java)getProject().createTask( "java" ); | |||
| execTask = null;//(Java)getProject().createTask( "java" ); | |||
| execTask.setDir( new File( "." ) ); | |||
| execTask.setClassname( "com.inprise.server.commandline.EJBUtilities" ); | |||
| @@ -170,7 +170,7 @@ public class WLJspc extends MatchingTask | |||
| // Therefore, takes loads of time | |||
| // Can pass directories at a time (*.jsp) but easily runs out of memory on hefty dirs | |||
| // (even on a Sun) | |||
| Java helperTask = (Java)getProject().createTask( "java" ); | |||
| Java helperTask = null;//(Java)getProject().createTask( "java" ); | |||
| helperTask.setFork( true ); | |||
| helperTask.setClassname( "weblogic.jspc" ); | |||
| String[] args = new String[ 12 ]; | |||
| @@ -227,7 +227,7 @@ public class WLJspc extends MatchingTask | |||
| System.out.println( "arg = " + arg ); | |||
| helperTask.clearArgs(); | |||
| //helperTask.clearArgs(); | |||
| helperTask.createArg().setValue( arg ); | |||
| helperTask.setClasspath( compileClasspath ); | |||
| if( helperTask.executeJava() != 0 ) | |||
| @@ -34,14 +34,14 @@ public class JasperC | |||
| { | |||
| // Create an instance of the compiler, redirecting output to | |||
| // the project log | |||
| Java java = (Java)( getJspc().getProject() ).createTask( "java" ); | |||
| //FIXME | |||
| Java java = null;//(Java)( getJspc().getProject() ).createTask( "java" ); | |||
| if( getJspc().getClasspath() != null ) | |||
| java.setClasspath( getJspc().getClasspath() ); | |||
| java.setClassname( "org.apache.jasper.JspC" ); | |||
| String args[] = cmd.getArguments(); | |||
| for( int i = 0; i < args.length; i++ ) | |||
| java.createArg().setValue( args[ i ] ); | |||
| java.setFailonerror( true ); | |||
| java.execute(); | |||
| return true; | |||
| } | |||
| @@ -8,7 +8,8 @@ | |||
| package org.apache.tools.ant.types; | |||
| import org.apache.myrmidon.api.TaskException; | |||
| import org.apache.myrmidon.framework.Os; | |||
| import org.apache.aut.nativelib.Os; | |||
| import java.io.File; | |||
| /** | |||
| * A representation of a Java command line that is nothing more than a composite | |||
| @@ -18,7 +19,8 @@ import org.apache.myrmidon.framework.Os; | |||
| * @author thomas.haas@softwired-inc.com | |||
| * @author <a href="sbailliez@apache.org">Stephane Bailliez</a> | |||
| */ | |||
| public class CommandlineJava implements Cloneable | |||
| public class CommandlineJava | |||
| implements Cloneable | |||
| { | |||
| private Commandline vmCommand = new Commandline(); | |||
| private Commandline javaCommand = new Commandline(); | |||
| @@ -265,8 +267,8 @@ public class CommandlineJava implements Cloneable | |||
| // on Windows java.home doesn't always refer to the correct location, | |||
| // so we need to fall back to assuming java is somewhere on the | |||
| // PATH. | |||
| java.io.File jExecutable = | |||
| new java.io.File( System.getProperty( "java.home" ) + | |||
| File jExecutable = | |||
| new File( System.getProperty( "java.home" ) + | |||
| "/../bin/java" + extension ); | |||
| if( jExecutable.exists() && !Os.isFamily( "netware" ) ) | |||
| @@ -11,7 +11,7 @@ import java.util.ArrayList; | |||
| import java.util.Iterator; | |||
| import java.util.Properties; | |||
| import org.apache.myrmidon.api.TaskException; | |||
| import org.apache.myrmidon.framework.exec.ExecException; | |||
| import org.apache.aut.nativelib.ExecException; | |||
| /** | |||
| * Specialized EnvironmentData class for System properties | |||
| @@ -12,7 +12,7 @@ import java.util.ArrayList; | |||
| import org.apache.avalon.excalibur.io.FileUtil; | |||
| import org.apache.avalon.framework.logger.AbstractLogEnabled; | |||
| import org.apache.myrmidon.api.TaskException; | |||
| import org.apache.myrmidon.framework.Os; | |||
| import org.apache.aut.nativelib.Os; | |||
| import org.apache.tools.ant.Task; | |||
| /** | |||
| @@ -8,14 +8,13 @@ | |||
| package org.apache.tools.ant.taskdefs; | |||
| import java.io.File; | |||
| import java.io.FileOutputStream; | |||
| import java.io.IOException; | |||
| import java.io.PrintStream; | |||
| import java.util.ArrayList; | |||
| import org.apache.myrmidon.api.TaskException; | |||
| import org.apache.myrmidon.api.AbstractTask; | |||
| import org.apache.tools.ant.Task; | |||
| import org.apache.tools.ant.taskdefs.exec.Execute; | |||
| import org.apache.tools.ant.taskdefs.exec.LogOutputStream; | |||
| import org.apache.tools.ant.taskdefs.exec.Execute2; | |||
| import org.apache.tools.ant.types.Argument; | |||
| import org.apache.tools.ant.types.CommandlineJava; | |||
| import org.apache.tools.ant.types.EnvironmentVariable; | |||
| @@ -29,41 +28,29 @@ import org.apache.tools.ant.types.Path; | |||
| * stefano@apache.org</a> | |||
| * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | |||
| */ | |||
| public class Java extends Task | |||
| public class Java | |||
| extends AbstractTask | |||
| { | |||
| private CommandlineJava cmdl = new CommandlineJava(); | |||
| private boolean fork = false; | |||
| private File dir = null; | |||
| private PrintStream outStream = null; | |||
| private boolean failOnError = false; | |||
| private File out; | |||
| private CommandlineJava m_cmdl = new CommandlineJava(); | |||
| private boolean m_fork; | |||
| private File m_dir; | |||
| private PrintStream m_outStream; | |||
| /** | |||
| * Set the class name. | |||
| * | |||
| * @param s The new Classname value | |||
| * @exception TaskException Description of Exception | |||
| */ | |||
| public void setClassname( String s ) | |||
| throws TaskException | |||
| { | |||
| if( cmdl.getJar() != null ) | |||
| { | |||
| throw new TaskException( "Cannot use 'jar' and 'classname' attributes in same command" ); | |||
| } | |||
| cmdl.setClassname( s ); | |||
| m_cmdl.setClassname( s ); | |||
| } | |||
| /** | |||
| * Set the classpath to be used for this compilation. | |||
| * | |||
| * @param s The new Classpath value | |||
| */ | |||
| public void setClasspath( Path s ) | |||
| public void setClasspath( final Path classpath ) | |||
| throws TaskException | |||
| { | |||
| createClasspath().append( s ); | |||
| createClasspath().append( classpath ); | |||
| } | |||
| /** | |||
| @@ -71,145 +58,83 @@ public class Java extends Task | |||
| * | |||
| * @param d The new Dir value | |||
| */ | |||
| public void setDir( File d ) | |||
| public void setDir( final File dir ) | |||
| { | |||
| this.dir = d; | |||
| } | |||
| /** | |||
| * Throw a TaskException if process returns non 0. | |||
| * | |||
| * @param fail The new Failonerror value | |||
| */ | |||
| public void setFailonerror( boolean fail ) | |||
| { | |||
| failOnError = fail; | |||
| m_dir = dir; | |||
| } | |||
| /** | |||
| * Set the forking flag. | |||
| * | |||
| * @param s The new Fork value | |||
| */ | |||
| public void setFork( boolean s ) | |||
| public void setFork( final boolean fork ) | |||
| { | |||
| this.fork = s; | |||
| m_fork = fork; | |||
| } | |||
| /** | |||
| * set the jar name... | |||
| * | |||
| * @param jarfile The new Jar value | |||
| * @exception TaskException Description of Exception | |||
| */ | |||
| public void setJar( File jarfile ) | |||
| throws TaskException | |||
| public void setJar( final File jar ) | |||
| { | |||
| if( cmdl.getClassname() != null ) | |||
| { | |||
| throw new TaskException( "Cannot use 'jar' and 'classname' attributes in same command." ); | |||
| } | |||
| cmdl.setJar( jarfile.getAbsolutePath() ); | |||
| m_cmdl.setJar( jar.getAbsolutePath() ); | |||
| } | |||
| /** | |||
| * Set the command used to start the VM (only if fork==false). | |||
| * | |||
| * @param s The new Jvm value | |||
| */ | |||
| public void setJvm( String s ) | |||
| public void setJvm( final String jvm ) | |||
| { | |||
| cmdl.setVm( s ); | |||
| m_cmdl.setVm( jvm ); | |||
| } | |||
| /** | |||
| * -mx or -Xmx depending on VM version | |||
| * | |||
| * @param max The new Maxmemory value | |||
| */ | |||
| public void setMaxmemory( String max ) | |||
| { | |||
| cmdl.setMaxmemory( max ); | |||
| } | |||
| /** | |||
| * File the output of the process is redirected to. | |||
| * | |||
| * @param out The new Output value | |||
| */ | |||
| public void setOutput( File out ) | |||
| public void setMaxmemory( final String max ) | |||
| { | |||
| this.out = out; | |||
| m_cmdl.setMaxmemory( max ); | |||
| } | |||
| /** | |||
| * Add a nested sysproperty element. | |||
| * | |||
| * @param sysp The feature to be added to the Sysproperty attribute | |||
| */ | |||
| public void addSysproperty( EnvironmentVariable sysp ) | |||
| public void addSysproperty( final EnvironmentVariable sysp ) | |||
| { | |||
| cmdl.addSysproperty( sysp ); | |||
| } | |||
| /** | |||
| * Clear out the arguments to this java task. | |||
| */ | |||
| public void clearArgs() | |||
| { | |||
| cmdl.clearJavaArgs(); | |||
| m_cmdl.addSysproperty( sysp ); | |||
| } | |||
| /** | |||
| * Creates a nested arg element. | |||
| * | |||
| * @return Description of the Returned Value | |||
| */ | |||
| public Argument createArg() | |||
| { | |||
| return cmdl.createArgument(); | |||
| return m_cmdl.createArgument(); | |||
| } | |||
| /** | |||
| * Creates a nested classpath element | |||
| * | |||
| * @return Description of the Returned Value | |||
| */ | |||
| public Path createClasspath() | |||
| throws TaskException | |||
| { | |||
| return cmdl.createClasspath().createPath(); | |||
| return m_cmdl.createClasspath().createPath(); | |||
| } | |||
| /** | |||
| * Creates a nested jvmarg element. | |||
| * | |||
| * @return Description of the Returned Value | |||
| */ | |||
| public Argument createJvmarg() | |||
| { | |||
| return cmdl.createVmArgument(); | |||
| return m_cmdl.createVmArgument(); | |||
| } | |||
| /** | |||
| * Do the execution. | |||
| * | |||
| * @exception TaskException Description of Exception | |||
| */ | |||
| public void execute() | |||
| throws TaskException | |||
| { | |||
| int err = -1; | |||
| if( ( err = executeJava() ) != 0 ) | |||
| final int err = executeJava(); | |||
| if( 0 != err ) | |||
| { | |||
| if( failOnError ) | |||
| { | |||
| throw new TaskException( "Java returned: " + err ); | |||
| } | |||
| else | |||
| { | |||
| getLogger().error( "Java Result: " + err ); | |||
| } | |||
| throw new TaskException( "Java returned: " + err ); | |||
| } | |||
| } | |||
| @@ -223,188 +148,107 @@ public class Java extends Task | |||
| public int executeJava() | |||
| throws TaskException | |||
| { | |||
| String classname = cmdl.getClassname(); | |||
| if( classname == null && cmdl.getJar() == null ) | |||
| final String classname = m_cmdl.getClassname(); | |||
| final String jar = m_cmdl.getJar(); | |||
| if( classname != null && jar != null ) | |||
| { | |||
| throw new TaskException( "Only one of Classname and Jar can be set." ); | |||
| } | |||
| else if( classname == null && jar == null ) | |||
| { | |||
| throw new TaskException( "Classname must not be null." ); | |||
| } | |||
| if( !fork && cmdl.getJar() != null ) | |||
| if( !m_fork && jar != null ) | |||
| { | |||
| throw new TaskException( "Cannot execute a jar in non-forked mode. Please set fork='true'. " ); | |||
| } | |||
| if( fork ) | |||
| if( m_fork ) | |||
| { | |||
| getLogger().debug( "Forking " + cmdl.toString() ); | |||
| getLogger().debug( "Forking " + m_cmdl.toString() ); | |||
| return run( cmdl.getCommandline() ); | |||
| return run( m_cmdl.getCommandline() ); | |||
| } | |||
| else | |||
| { | |||
| if( cmdl.getVmCommand().size() > 1 ) | |||
| if( m_cmdl.getVmCommand().size() > 1 ) | |||
| { | |||
| getLogger().warn( "JVM args ignored when same JVM is used." ); | |||
| } | |||
| if( dir != null ) | |||
| if( m_dir != null ) | |||
| { | |||
| getLogger().warn( "Working directory ignored when same JVM is used." ); | |||
| } | |||
| getLogger().debug( "Running in same VM " + cmdl.getJavaCommand().toString() ); | |||
| run( cmdl ); | |||
| getLogger().debug( "Running in same VM " + m_cmdl.getJavaCommand().toString() ); | |||
| run( m_cmdl ); | |||
| return 0; | |||
| } | |||
| } | |||
| protected void handleErrorOutput( String line ) | |||
| { | |||
| if( outStream != null ) | |||
| { | |||
| outStream.println( line ); | |||
| } | |||
| else | |||
| { | |||
| super.handleErrorOutput( line ); | |||
| } | |||
| } | |||
| protected void handleOutput( String line ) | |||
| { | |||
| if( outStream != null ) | |||
| { | |||
| outStream.println( line ); | |||
| } | |||
| else | |||
| { | |||
| super.handleOutput( line ); | |||
| } | |||
| } | |||
| /** | |||
| * Executes the given classname with the given arguments as it was a command | |||
| * line application. | |||
| * | |||
| * @param classname Description of Parameter | |||
| * @param args Description of Parameter | |||
| * @exception TaskException Description of Exception | |||
| */ | |||
| protected void run( String classname, ArrayList args ) | |||
| protected void run( final String classname, final ArrayList args ) | |||
| throws TaskException | |||
| { | |||
| CommandlineJava cmdj = new CommandlineJava(); | |||
| cmdj.setClassname( classname ); | |||
| for( int i = 0; i < args.size(); i++ ) | |||
| final CommandlineJava java = new CommandlineJava(); | |||
| java.setClassname( classname ); | |||
| final int size = args.size(); | |||
| for( int i = 0; i < size; i++ ) | |||
| { | |||
| cmdj.createArgument().setValue( (String)args.get( i ) ); | |||
| final String arg = (String)args.get( i ); | |||
| java.createArgument().setValue( arg ); | |||
| } | |||
| run( cmdj ); | |||
| run( java ); | |||
| } | |||
| /** | |||
| * Executes the given classname with the given arguments as it was a command | |||
| * line application. | |||
| * | |||
| * @param command Description of Parameter | |||
| * @exception TaskException Description of Exception | |||
| */ | |||
| private void run( CommandlineJava command ) | |||
| private void run( final CommandlineJava command ) | |||
| throws TaskException | |||
| { | |||
| ExecuteJava exe = new ExecuteJava(); | |||
| final ExecuteJava exe = new ExecuteJava(); | |||
| exe.setJavaCommand( command.getJavaCommand() ); | |||
| exe.setClasspath( command.getClasspath() ); | |||
| exe.setSystemProperties( command.getSystemProperties() ); | |||
| if( out != null ) | |||
| { | |||
| try | |||
| { | |||
| outStream = new PrintStream( new FileOutputStream( out ) ); | |||
| exe.execute( getProject() ); | |||
| } | |||
| catch( IOException io ) | |||
| { | |||
| throw new TaskException( "Error", io ); | |||
| } | |||
| finally | |||
| { | |||
| if( outStream != null ) | |||
| { | |||
| outStream.close(); | |||
| } | |||
| } | |||
| } | |||
| else | |||
| { | |||
| exe.execute( getProject() ); | |||
| } | |||
| exe.execute(); | |||
| } | |||
| /** | |||
| * Executes the given classname with the given arguments in a separate VM. | |||
| * | |||
| * @param command Description of Parameter | |||
| * @return Description of the Returned Value | |||
| * @exception TaskException Description of Exception | |||
| */ | |||
| private int run( String[] command ) | |||
| private int run( final String[] command ) | |||
| throws TaskException | |||
| { | |||
| FileOutputStream fos = null; | |||
| try | |||
| { | |||
| Execute exe = null; | |||
| if( out == null ) | |||
| { | |||
| exe = new Execute(); | |||
| exe.setOutput( new LogOutputStream( getLogger(), false ) ); | |||
| exe.setError( new LogOutputStream( getLogger(), true ) ); | |||
| } | |||
| else | |||
| { | |||
| fos = new FileOutputStream( out ); | |||
| exe = new Execute(); | |||
| exe.setOutput( fos ); | |||
| exe.setError( fos ); | |||
| } | |||
| if( dir == null ) | |||
| { | |||
| dir = getBaseDirectory(); | |||
| } | |||
| else if( !dir.exists() || !dir.isDirectory() ) | |||
| { | |||
| throw new TaskException( dir.getAbsolutePath() + " is not a valid directory" ); | |||
| } | |||
| exe.setWorkingDirectory( dir ); | |||
| final Execute2 exe = new Execute2(); | |||
| setupLogger( exe ); | |||
| exe.setCommandline( command ); | |||
| try | |||
| { | |||
| return exe.execute(); | |||
| } | |||
| catch( IOException e ) | |||
| { | |||
| throw new TaskException( "Error", e ); | |||
| } | |||
| if( m_dir == null ) | |||
| { | |||
| m_dir = getBaseDirectory(); | |||
| } | |||
| catch( IOException io ) | |||
| else if( !m_dir.exists() || !m_dir.isDirectory() ) | |||
| { | |||
| throw new TaskException( "Error", io ); | |||
| final String message = m_dir.getAbsolutePath() + " is not a valid directory"; | |||
| throw new TaskException( message ); | |||
| } | |||
| finally | |||
| exe.setWorkingDirectory( m_dir ); | |||
| exe.setCommandline( command ); | |||
| try | |||
| { | |||
| if( fos != null ) | |||
| { | |||
| try | |||
| { | |||
| fos.close(); | |||
| } | |||
| catch( IOException io ) | |||
| { | |||
| } | |||
| } | |||
| return exe.execute(); | |||
| } | |||
| catch( IOException e ) | |||
| { | |||
| final String message = "Error executing class"; | |||
| throw new TaskException( message, e ); | |||
| } | |||
| } | |||
| } | |||
| @@ -198,7 +198,7 @@ public class BorlandGenerateClient extends Task | |||
| getLogger().info( "mode : java" ); | |||
| org.apache.tools.ant.taskdefs.Java execTask = null; | |||
| execTask = (Java)getProject().createTask( "java" ); | |||
| execTask = null;//(Java)getProject().createTask( "java" ); | |||
| execTask.setDir( new File( "." ) ); | |||
| execTask.setClassname( "com.inprise.server.commandline.EJBUtilities" ); | |||
| @@ -170,7 +170,7 @@ public class WLJspc extends MatchingTask | |||
| // Therefore, takes loads of time | |||
| // Can pass directories at a time (*.jsp) but easily runs out of memory on hefty dirs | |||
| // (even on a Sun) | |||
| Java helperTask = (Java)getProject().createTask( "java" ); | |||
| Java helperTask = null;//(Java)getProject().createTask( "java" ); | |||
| helperTask.setFork( true ); | |||
| helperTask.setClassname( "weblogic.jspc" ); | |||
| String[] args = new String[ 12 ]; | |||
| @@ -227,7 +227,7 @@ public class WLJspc extends MatchingTask | |||
| System.out.println( "arg = " + arg ); | |||
| helperTask.clearArgs(); | |||
| //helperTask.clearArgs(); | |||
| helperTask.createArg().setValue( arg ); | |||
| helperTask.setClasspath( compileClasspath ); | |||
| if( helperTask.executeJava() != 0 ) | |||
| @@ -34,14 +34,14 @@ public class JasperC | |||
| { | |||
| // Create an instance of the compiler, redirecting output to | |||
| // the project log | |||
| Java java = (Java)( getJspc().getProject() ).createTask( "java" ); | |||
| //FIXME | |||
| Java java = null;//(Java)( getJspc().getProject() ).createTask( "java" ); | |||
| if( getJspc().getClasspath() != null ) | |||
| java.setClasspath( getJspc().getClasspath() ); | |||
| java.setClassname( "org.apache.jasper.JspC" ); | |||
| String args[] = cmd.getArguments(); | |||
| for( int i = 0; i < args.length; i++ ) | |||
| java.createArg().setValue( args[ i ] ); | |||
| java.setFailonerror( true ); | |||
| java.execute(); | |||
| return true; | |||
| } | |||
| @@ -8,7 +8,8 @@ | |||
| package org.apache.tools.ant.types; | |||
| import org.apache.myrmidon.api.TaskException; | |||
| import org.apache.myrmidon.framework.Os; | |||
| import org.apache.aut.nativelib.Os; | |||
| import java.io.File; | |||
| /** | |||
| * A representation of a Java command line that is nothing more than a composite | |||
| @@ -18,7 +19,8 @@ import org.apache.myrmidon.framework.Os; | |||
| * @author thomas.haas@softwired-inc.com | |||
| * @author <a href="sbailliez@apache.org">Stephane Bailliez</a> | |||
| */ | |||
| public class CommandlineJava implements Cloneable | |||
| public class CommandlineJava | |||
| implements Cloneable | |||
| { | |||
| private Commandline vmCommand = new Commandline(); | |||
| private Commandline javaCommand = new Commandline(); | |||
| @@ -265,8 +267,8 @@ public class CommandlineJava implements Cloneable | |||
| // on Windows java.home doesn't always refer to the correct location, | |||
| // so we need to fall back to assuming java is somewhere on the | |||
| // PATH. | |||
| java.io.File jExecutable = | |||
| new java.io.File( System.getProperty( "java.home" ) + | |||
| File jExecutable = | |||
| new File( System.getProperty( "java.home" ) + | |||
| "/../bin/java" + extension ); | |||
| if( jExecutable.exists() && !Os.isFamily( "netware" ) ) | |||
| @@ -11,7 +11,7 @@ import java.util.ArrayList; | |||
| import java.util.Iterator; | |||
| import java.util.Properties; | |||
| import org.apache.myrmidon.api.TaskException; | |||
| import org.apache.myrmidon.framework.exec.ExecException; | |||
| import org.apache.aut.nativelib.ExecException; | |||
| /** | |||
| * Specialized EnvironmentData class for System properties | |||
| @@ -12,7 +12,7 @@ import java.util.ArrayList; | |||
| import org.apache.avalon.excalibur.io.FileUtil; | |||
| import org.apache.avalon.framework.logger.AbstractLogEnabled; | |||
| import org.apache.myrmidon.api.TaskException; | |||
| import org.apache.myrmidon.framework.Os; | |||
| import org.apache.aut.nativelib.Os; | |||
| import org.apache.tools.ant.Task; | |||
| /** | |||