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; | ||||
/** | /** | ||||