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; | package org.apache.tools.ant.taskdefs; | ||||
| import java.io.File; | import java.io.File; | ||||
| import java.io.FileOutputStream; | |||||
| import java.io.IOException; | import java.io.IOException; | ||||
| import java.io.PrintStream; | import java.io.PrintStream; | ||||
| import java.util.ArrayList; | import java.util.ArrayList; | ||||
| import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
| import org.apache.myrmidon.api.AbstractTask; | |||||
| import org.apache.tools.ant.Task; | 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.Argument; | ||||
| import org.apache.tools.ant.types.CommandlineJava; | import org.apache.tools.ant.types.CommandlineJava; | ||||
| import org.apache.tools.ant.types.EnvironmentVariable; | import org.apache.tools.ant.types.EnvironmentVariable; | ||||
| @@ -29,41 +28,29 @@ import org.apache.tools.ant.types.Path; | |||||
| * stefano@apache.org</a> | * stefano@apache.org</a> | ||||
| * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</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. | * Set the class name. | ||||
| * | |||||
| * @param s The new Classname value | |||||
| * @exception TaskException Description of Exception | |||||
| */ | */ | ||||
| public void setClassname( String s ) | 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. | * 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 | throws TaskException | ||||
| { | { | ||||
| createClasspath().append( s ); | |||||
| createClasspath().append( classpath ); | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -71,145 +58,83 @@ public class Java extends Task | |||||
| * | * | ||||
| * @param d The new Dir value | * @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. | * 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... | * 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). | * 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 | * -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. | * 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. | * Creates a nested arg element. | ||||
| * | |||||
| * @return Description of the Returned Value | |||||
| */ | */ | ||||
| public Argument createArg() | public Argument createArg() | ||||
| { | { | ||||
| return cmdl.createArgument(); | |||||
| return m_cmdl.createArgument(); | |||||
| } | } | ||||
| /** | /** | ||||
| * Creates a nested classpath element | * Creates a nested classpath element | ||||
| * | |||||
| * @return Description of the Returned Value | |||||
| */ | */ | ||||
| public Path createClasspath() | public Path createClasspath() | ||||
| throws TaskException | throws TaskException | ||||
| { | { | ||||
| return cmdl.createClasspath().createPath(); | |||||
| return m_cmdl.createClasspath().createPath(); | |||||
| } | } | ||||
| /** | /** | ||||
| * Creates a nested jvmarg element. | * Creates a nested jvmarg element. | ||||
| * | |||||
| * @return Description of the Returned Value | |||||
| */ | */ | ||||
| public Argument createJvmarg() | public Argument createJvmarg() | ||||
| { | { | ||||
| return cmdl.createVmArgument(); | |||||
| return m_cmdl.createVmArgument(); | |||||
| } | } | ||||
| /** | |||||
| * Do the execution. | |||||
| * | |||||
| * @exception TaskException Description of Exception | |||||
| */ | |||||
| public void execute() | public void execute() | ||||
| throws TaskException | 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() | public int executeJava() | ||||
| throws TaskException | 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." ); | 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'. " ); | 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 | else | ||||
| { | { | ||||
| if( cmdl.getVmCommand().size() > 1 ) | |||||
| if( m_cmdl.getVmCommand().size() > 1 ) | |||||
| { | { | ||||
| getLogger().warn( "JVM args ignored when same JVM is used." ); | 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().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; | 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 | * Executes the given classname with the given arguments as it was a command | ||||
| * line application. | * 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 | 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 | * Executes the given classname with the given arguments as it was a command | ||||
| * line application. | * 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 | throws TaskException | ||||
| { | { | ||||
| ExecuteJava exe = new ExecuteJava(); | |||||
| final ExecuteJava exe = new ExecuteJava(); | |||||
| exe.setJavaCommand( command.getJavaCommand() ); | exe.setJavaCommand( command.getJavaCommand() ); | ||||
| exe.setClasspath( command.getClasspath() ); | exe.setClasspath( command.getClasspath() ); | ||||
| exe.setSystemProperties( command.getSystemProperties() ); | 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. | * 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 | 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" ); | getLogger().info( "mode : java" ); | ||||
| org.apache.tools.ant.taskdefs.Java execTask = null; | org.apache.tools.ant.taskdefs.Java execTask = null; | ||||
| execTask = (Java)getProject().createTask( "java" ); | |||||
| execTask = null;//(Java)getProject().createTask( "java" ); | |||||
| execTask.setDir( new File( "." ) ); | execTask.setDir( new File( "." ) ); | ||||
| execTask.setClassname( "com.inprise.server.commandline.EJBUtilities" ); | execTask.setClassname( "com.inprise.server.commandline.EJBUtilities" ); | ||||
| @@ -170,7 +170,7 @@ public class WLJspc extends MatchingTask | |||||
| // Therefore, takes loads of time | // Therefore, takes loads of time | ||||
| // Can pass directories at a time (*.jsp) but easily runs out of memory on hefty dirs | // Can pass directories at a time (*.jsp) but easily runs out of memory on hefty dirs | ||||
| // (even on a Sun) | // (even on a Sun) | ||||
| Java helperTask = (Java)getProject().createTask( "java" ); | |||||
| Java helperTask = null;//(Java)getProject().createTask( "java" ); | |||||
| helperTask.setFork( true ); | helperTask.setFork( true ); | ||||
| helperTask.setClassname( "weblogic.jspc" ); | helperTask.setClassname( "weblogic.jspc" ); | ||||
| String[] args = new String[ 12 ]; | String[] args = new String[ 12 ]; | ||||
| @@ -227,7 +227,7 @@ public class WLJspc extends MatchingTask | |||||
| System.out.println( "arg = " + arg ); | System.out.println( "arg = " + arg ); | ||||
| helperTask.clearArgs(); | |||||
| //helperTask.clearArgs(); | |||||
| helperTask.createArg().setValue( arg ); | helperTask.createArg().setValue( arg ); | ||||
| helperTask.setClasspath( compileClasspath ); | helperTask.setClasspath( compileClasspath ); | ||||
| if( helperTask.executeJava() != 0 ) | if( helperTask.executeJava() != 0 ) | ||||
| @@ -34,14 +34,14 @@ public class JasperC | |||||
| { | { | ||||
| // Create an instance of the compiler, redirecting output to | // Create an instance of the compiler, redirecting output to | ||||
| // the project log | // the project log | ||||
| Java java = (Java)( getJspc().getProject() ).createTask( "java" ); | |||||
| //FIXME | |||||
| Java java = null;//(Java)( getJspc().getProject() ).createTask( "java" ); | |||||
| if( getJspc().getClasspath() != null ) | if( getJspc().getClasspath() != null ) | ||||
| java.setClasspath( getJspc().getClasspath() ); | java.setClasspath( getJspc().getClasspath() ); | ||||
| java.setClassname( "org.apache.jasper.JspC" ); | java.setClassname( "org.apache.jasper.JspC" ); | ||||
| String args[] = cmd.getArguments(); | String args[] = cmd.getArguments(); | ||||
| for( int i = 0; i < args.length; i++ ) | for( int i = 0; i < args.length; i++ ) | ||||
| java.createArg().setValue( args[ i ] ); | java.createArg().setValue( args[ i ] ); | ||||
| java.setFailonerror( true ); | |||||
| java.execute(); | java.execute(); | ||||
| return true; | return true; | ||||
| } | } | ||||
| @@ -8,7 +8,8 @@ | |||||
| package org.apache.tools.ant.types; | package org.apache.tools.ant.types; | ||||
| import org.apache.myrmidon.api.TaskException; | 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 | * 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 thomas.haas@softwired-inc.com | ||||
| * @author <a href="sbailliez@apache.org">Stephane Bailliez</a> | * @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 vmCommand = new Commandline(); | ||||
| private Commandline javaCommand = 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, | // 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 | // so we need to fall back to assuming java is somewhere on the | ||||
| // PATH. | // PATH. | ||||
| java.io.File jExecutable = | |||||
| new java.io.File( System.getProperty( "java.home" ) + | |||||
| File jExecutable = | |||||
| new File( System.getProperty( "java.home" ) + | |||||
| "/../bin/java" + extension ); | "/../bin/java" + extension ); | ||||
| if( jExecutable.exists() && !Os.isFamily( "netware" ) ) | if( jExecutable.exists() && !Os.isFamily( "netware" ) ) | ||||
| @@ -11,7 +11,7 @@ import java.util.ArrayList; | |||||
| import java.util.Iterator; | import java.util.Iterator; | ||||
| import java.util.Properties; | import java.util.Properties; | ||||
| import org.apache.myrmidon.api.TaskException; | 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 | * 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.excalibur.io.FileUtil; | ||||
| import org.apache.avalon.framework.logger.AbstractLogEnabled; | import org.apache.avalon.framework.logger.AbstractLogEnabled; | ||||
| import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
| import org.apache.myrmidon.framework.Os; | |||||
| import org.apache.aut.nativelib.Os; | |||||
| import org.apache.tools.ant.Task; | import org.apache.tools.ant.Task; | ||||
| /** | /** | ||||
| @@ -8,14 +8,13 @@ | |||||
| package org.apache.tools.ant.taskdefs; | package org.apache.tools.ant.taskdefs; | ||||
| import java.io.File; | import java.io.File; | ||||
| import java.io.FileOutputStream; | |||||
| import java.io.IOException; | import java.io.IOException; | ||||
| import java.io.PrintStream; | import java.io.PrintStream; | ||||
| import java.util.ArrayList; | import java.util.ArrayList; | ||||
| import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
| import org.apache.myrmidon.api.AbstractTask; | |||||
| import org.apache.tools.ant.Task; | 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.Argument; | ||||
| import org.apache.tools.ant.types.CommandlineJava; | import org.apache.tools.ant.types.CommandlineJava; | ||||
| import org.apache.tools.ant.types.EnvironmentVariable; | import org.apache.tools.ant.types.EnvironmentVariable; | ||||
| @@ -29,41 +28,29 @@ import org.apache.tools.ant.types.Path; | |||||
| * stefano@apache.org</a> | * stefano@apache.org</a> | ||||
| * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</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. | * Set the class name. | ||||
| * | |||||
| * @param s The new Classname value | |||||
| * @exception TaskException Description of Exception | |||||
| */ | */ | ||||
| public void setClassname( String s ) | 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. | * 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 | throws TaskException | ||||
| { | { | ||||
| createClasspath().append( s ); | |||||
| createClasspath().append( classpath ); | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -71,145 +58,83 @@ public class Java extends Task | |||||
| * | * | ||||
| * @param d The new Dir value | * @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. | * 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... | * 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). | * 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 | * -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. | * 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. | * Creates a nested arg element. | ||||
| * | |||||
| * @return Description of the Returned Value | |||||
| */ | */ | ||||
| public Argument createArg() | public Argument createArg() | ||||
| { | { | ||||
| return cmdl.createArgument(); | |||||
| return m_cmdl.createArgument(); | |||||
| } | } | ||||
| /** | /** | ||||
| * Creates a nested classpath element | * Creates a nested classpath element | ||||
| * | |||||
| * @return Description of the Returned Value | |||||
| */ | */ | ||||
| public Path createClasspath() | public Path createClasspath() | ||||
| throws TaskException | throws TaskException | ||||
| { | { | ||||
| return cmdl.createClasspath().createPath(); | |||||
| return m_cmdl.createClasspath().createPath(); | |||||
| } | } | ||||
| /** | /** | ||||
| * Creates a nested jvmarg element. | * Creates a nested jvmarg element. | ||||
| * | |||||
| * @return Description of the Returned Value | |||||
| */ | */ | ||||
| public Argument createJvmarg() | public Argument createJvmarg() | ||||
| { | { | ||||
| return cmdl.createVmArgument(); | |||||
| return m_cmdl.createVmArgument(); | |||||
| } | } | ||||
| /** | |||||
| * Do the execution. | |||||
| * | |||||
| * @exception TaskException Description of Exception | |||||
| */ | |||||
| public void execute() | public void execute() | ||||
| throws TaskException | 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() | public int executeJava() | ||||
| throws TaskException | 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." ); | 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'. " ); | 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 | else | ||||
| { | { | ||||
| if( cmdl.getVmCommand().size() > 1 ) | |||||
| if( m_cmdl.getVmCommand().size() > 1 ) | |||||
| { | { | ||||
| getLogger().warn( "JVM args ignored when same JVM is used." ); | 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().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; | 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 | * Executes the given classname with the given arguments as it was a command | ||||
| * line application. | * 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 | 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 | * Executes the given classname with the given arguments as it was a command | ||||
| * line application. | * 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 | throws TaskException | ||||
| { | { | ||||
| ExecuteJava exe = new ExecuteJava(); | |||||
| final ExecuteJava exe = new ExecuteJava(); | |||||
| exe.setJavaCommand( command.getJavaCommand() ); | exe.setJavaCommand( command.getJavaCommand() ); | ||||
| exe.setClasspath( command.getClasspath() ); | exe.setClasspath( command.getClasspath() ); | ||||
| exe.setSystemProperties( command.getSystemProperties() ); | 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. | * 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 | 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" ); | getLogger().info( "mode : java" ); | ||||
| org.apache.tools.ant.taskdefs.Java execTask = null; | org.apache.tools.ant.taskdefs.Java execTask = null; | ||||
| execTask = (Java)getProject().createTask( "java" ); | |||||
| execTask = null;//(Java)getProject().createTask( "java" ); | |||||
| execTask.setDir( new File( "." ) ); | execTask.setDir( new File( "." ) ); | ||||
| execTask.setClassname( "com.inprise.server.commandline.EJBUtilities" ); | execTask.setClassname( "com.inprise.server.commandline.EJBUtilities" ); | ||||
| @@ -170,7 +170,7 @@ public class WLJspc extends MatchingTask | |||||
| // Therefore, takes loads of time | // Therefore, takes loads of time | ||||
| // Can pass directories at a time (*.jsp) but easily runs out of memory on hefty dirs | // Can pass directories at a time (*.jsp) but easily runs out of memory on hefty dirs | ||||
| // (even on a Sun) | // (even on a Sun) | ||||
| Java helperTask = (Java)getProject().createTask( "java" ); | |||||
| Java helperTask = null;//(Java)getProject().createTask( "java" ); | |||||
| helperTask.setFork( true ); | helperTask.setFork( true ); | ||||
| helperTask.setClassname( "weblogic.jspc" ); | helperTask.setClassname( "weblogic.jspc" ); | ||||
| String[] args = new String[ 12 ]; | String[] args = new String[ 12 ]; | ||||
| @@ -227,7 +227,7 @@ public class WLJspc extends MatchingTask | |||||
| System.out.println( "arg = " + arg ); | System.out.println( "arg = " + arg ); | ||||
| helperTask.clearArgs(); | |||||
| //helperTask.clearArgs(); | |||||
| helperTask.createArg().setValue( arg ); | helperTask.createArg().setValue( arg ); | ||||
| helperTask.setClasspath( compileClasspath ); | helperTask.setClasspath( compileClasspath ); | ||||
| if( helperTask.executeJava() != 0 ) | if( helperTask.executeJava() != 0 ) | ||||
| @@ -34,14 +34,14 @@ public class JasperC | |||||
| { | { | ||||
| // Create an instance of the compiler, redirecting output to | // Create an instance of the compiler, redirecting output to | ||||
| // the project log | // the project log | ||||
| Java java = (Java)( getJspc().getProject() ).createTask( "java" ); | |||||
| //FIXME | |||||
| Java java = null;//(Java)( getJspc().getProject() ).createTask( "java" ); | |||||
| if( getJspc().getClasspath() != null ) | if( getJspc().getClasspath() != null ) | ||||
| java.setClasspath( getJspc().getClasspath() ); | java.setClasspath( getJspc().getClasspath() ); | ||||
| java.setClassname( "org.apache.jasper.JspC" ); | java.setClassname( "org.apache.jasper.JspC" ); | ||||
| String args[] = cmd.getArguments(); | String args[] = cmd.getArguments(); | ||||
| for( int i = 0; i < args.length; i++ ) | for( int i = 0; i < args.length; i++ ) | ||||
| java.createArg().setValue( args[ i ] ); | java.createArg().setValue( args[ i ] ); | ||||
| java.setFailonerror( true ); | |||||
| java.execute(); | java.execute(); | ||||
| return true; | return true; | ||||
| } | } | ||||
| @@ -8,7 +8,8 @@ | |||||
| package org.apache.tools.ant.types; | package org.apache.tools.ant.types; | ||||
| import org.apache.myrmidon.api.TaskException; | 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 | * 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 thomas.haas@softwired-inc.com | ||||
| * @author <a href="sbailliez@apache.org">Stephane Bailliez</a> | * @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 vmCommand = new Commandline(); | ||||
| private Commandline javaCommand = 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, | // 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 | // so we need to fall back to assuming java is somewhere on the | ||||
| // PATH. | // PATH. | ||||
| java.io.File jExecutable = | |||||
| new java.io.File( System.getProperty( "java.home" ) + | |||||
| File jExecutable = | |||||
| new File( System.getProperty( "java.home" ) + | |||||
| "/../bin/java" + extension ); | "/../bin/java" + extension ); | ||||
| if( jExecutable.exists() && !Os.isFamily( "netware" ) ) | if( jExecutable.exists() && !Os.isFamily( "netware" ) ) | ||||
| @@ -11,7 +11,7 @@ import java.util.ArrayList; | |||||
| import java.util.Iterator; | import java.util.Iterator; | ||||
| import java.util.Properties; | import java.util.Properties; | ||||
| import org.apache.myrmidon.api.TaskException; | 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 | * 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.excalibur.io.FileUtil; | ||||
| import org.apache.avalon.framework.logger.AbstractLogEnabled; | import org.apache.avalon.framework.logger.AbstractLogEnabled; | ||||
| import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
| import org.apache.myrmidon.framework.Os; | |||||
| import org.apache.aut.nativelib.Os; | |||||
| import org.apache.tools.ant.Task; | import org.apache.tools.ant.Task; | ||||
| /** | /** | ||||