execution (after which it can be split into AUT): * ExecuteJava now handles both in-jvm and forked java app execution. Logging and error reporting are pretty rough. * Moved most of the guts of <java> into ExecuteJava. * Copied most of CommandlineJava into ExecuteJava. Haven't changed CommandlineJava (much) yet. * Removed the ability to use system properties when executing in-jvm. * Another attempt at fixing the ant1 descriptor to enable <java> and <path>. git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@271899 13f79535-47bb-0310-9956-ffa450edef68master
@@ -235,7 +235,7 @@ Legal: | |||||
<patternset refid="myrmidon-api.include"/> | <patternset refid="myrmidon-api.include"/> | ||||
<patternset refid="myrmidon-container.include"/> | <patternset refid="myrmidon-container.include"/> | ||||
<patternset refid="aut.include"/> | <patternset refid="aut.include"/> | ||||
<patternset refid="ant1.include"/> | |||||
<patternset refid="ant1.todo.include"/> | |||||
<patternset refid="selftest.include"/> | <patternset refid="selftest.include"/> | ||||
<patternset refid="selftest-extension1.include"/> | <patternset refid="selftest-extension1.include"/> | ||||
<include name="org/apache/antlib/**"/> | <include name="org/apache/antlib/**"/> | ||||
@@ -281,7 +281,7 @@ Legal: | |||||
<property name="util.package" value="${ant.package}/util"/> | <property name="util.package" value="${ant.package}/util"/> | ||||
<property name="regexp.package" value="${util.package}/regexp"/> | <property name="regexp.package" value="${util.package}/regexp"/> | ||||
<patternset id="ant1.include"> | |||||
<patternset id="ant1.todo.include"> | |||||
<include name="org/apache/tools/**" /> | <include name="org/apache/tools/**" /> | ||||
<exclude name="${regexp.package}/JakartaRegexp*.java" | <exclude name="${regexp.package}/JakartaRegexp*.java" | ||||
unless="jakarta.regexp.present" /> | unless="jakarta.regexp.present" /> | ||||
@@ -450,10 +450,11 @@ Legal: | |||||
<patternset refid="aut.include"/> | <patternset refid="aut.include"/> | ||||
</antlib-jar> | </antlib-jar> | ||||
<jar jarfile="${build.lib}/ant1.jar" | |||||
basedir="${build.classes}" > | |||||
<patternset refid="ant1.include"/> | |||||
</jar> | |||||
<antlib-jar jarfile="${build.lib}/ant1_todo.jar" | |||||
basedir="${build.classes}" | |||||
descriptor="${manifest.dir}/ant1-ant-descriptor.xml" > | |||||
<patternset refid="ant1.todo.include"/> | |||||
</antlib-jar> | |||||
<antlib-jar jarfile="${build.ext}/selftest.atl" | <antlib-jar jarfile="${build.ext}/selftest.atl" | ||||
basedir="${build.classes}" | basedir="${build.classes}" | ||||
@@ -1,13 +1,12 @@ | |||||
<ant-lib version="1.0"> | <ant-lib version="1.0"> | ||||
<types> | |||||
<data-type name="path" classname="org.apache.tools.ant.types.Path" /> | |||||
<task name="path" classname="org.apache.myrmidon.framework.TypeInstanceTask" /> | |||||
<converter | |||||
classname="org.apache.tools.ant.types.converters.StringToPathConverter" | |||||
source="java.lang.String" | |||||
destination="org.apache.tools.ant.types.Path" | |||||
/> | |||||
</types> | |||||
<types> | |||||
<task name="java" classname="org.apache.tools.todo.taskdefs.Java" /> | |||||
<data-type name="path" classname="org.apache.tools.todo.types.Path" /> | |||||
<task name="path" classname="org.apache.myrmidon.framework.TypeInstanceTask" /> | |||||
<converter classname="org.apache.tools.ant.types.converters.StringToPathConverter" | |||||
source="java.lang.String" | |||||
destination="org.apache.tools.ant.types.Path" /> | |||||
</types> | |||||
</ant-lib> | </ant-lib> |
@@ -7,99 +7,282 @@ | |||||
*/ | */ | ||||
package org.apache.tools.todo.taskdefs; | package org.apache.tools.todo.taskdefs; | ||||
import java.io.File; | |||||
import java.lang.reflect.InvocationTargetException; | import java.lang.reflect.InvocationTargetException; | ||||
import java.lang.reflect.Method; | import java.lang.reflect.Method; | ||||
import java.net.URL; | import java.net.URL; | ||||
import java.net.URLClassLoader; | import java.net.URLClassLoader; | ||||
import org.apache.myrmidon.api.TaskContext; | |||||
import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
import org.apache.myrmidon.framework.Execute; | |||||
import org.apache.tools.todo.types.Commandline; | import org.apache.tools.todo.types.Commandline; | ||||
import org.apache.tools.todo.types.Path; | import org.apache.tools.todo.types.Path; | ||||
import org.apache.tools.todo.types.PathUtil; | import org.apache.tools.todo.types.PathUtil; | ||||
import org.apache.tools.todo.types.SysProperties; | import org.apache.tools.todo.types.SysProperties; | ||||
import org.apache.tools.todo.util.FileUtils; | |||||
import org.apache.aut.nativelib.Os; | |||||
/* | |||||
/** | |||||
* A utility class that executes a Java app, either in this JVM, or a forked | |||||
* JVM. | |||||
* | |||||
* @author thomas.haas@softwired-inc.com | * @author thomas.haas@softwired-inc.com | ||||
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | ||||
*/ | */ | ||||
public class ExecuteJava | public class ExecuteJava | ||||
{ | { | ||||
private Commandline m_javaCommand; | |||||
private Path m_classpath; | |||||
private SysProperties m_sysProperties; | |||||
private final Path m_classPath = new Path(); | |||||
private final SysProperties m_sysProperties = new SysProperties(); | |||||
private final Commandline m_args = new Commandline(); | |||||
private final Commandline m_vmArgs = new Commandline(); | |||||
private boolean m_fork; | |||||
private File m_workingDirectory; | |||||
private File m_jar; | |||||
private String m_jvm; | |||||
private String m_className; | |||||
private String m_maxMemory; | |||||
public void setClasspath( final Path classpath ) | |||||
public void setClassName( final String className ) | |||||
{ | { | ||||
m_classpath = classpath; | |||||
m_className = className; | |||||
} | } | ||||
public void setJavaCommand( final Commandline javaCommand ) | |||||
public void setJar( final File jar ) | |||||
{ | { | ||||
m_javaCommand = javaCommand; | |||||
m_jar = jar; | |||||
} | } | ||||
public void setSystemProperties( final SysProperties sysProperties ) | |||||
public void setFork( final boolean fork ) | |||||
{ | { | ||||
m_sysProperties = sysProperties; | |||||
m_fork = fork; | |||||
} | } | ||||
public void execute() | |||||
throws TaskException | |||||
public void setMaxMemory( final String maxMemory ) | |||||
{ | { | ||||
final String classname = m_javaCommand.getExecutable(); | |||||
final Object[] argument = new Object[]{m_javaCommand.getArguments()}; | |||||
m_maxMemory = maxMemory; | |||||
} | |||||
try | |||||
public void setWorkingDirectory( final File workingDirectory ) | |||||
{ | |||||
m_workingDirectory = workingDirectory; | |||||
} | |||||
public void setJvm( final String jvm ) | |||||
{ | |||||
m_jvm = jvm; | |||||
} | |||||
public Path getClassPath() | |||||
{ | |||||
return m_classPath; | |||||
} | |||||
public SysProperties getSysProperties() | |||||
{ | |||||
return m_sysProperties; | |||||
} | |||||
public Commandline getArguments() | |||||
{ | |||||
return m_args; | |||||
} | |||||
public Commandline getVmArguments() | |||||
{ | |||||
return m_vmArgs; | |||||
} | |||||
public void execute( final TaskContext context ) | |||||
throws TaskException | |||||
{ | |||||
// Validate | |||||
if( m_className != null && m_jar != null ) | |||||
{ | |||||
throw new TaskException( "Only one of Classname and Jar can be set." ); | |||||
} | |||||
else if( m_className == null && m_jar == null ) | |||||
{ | |||||
throw new TaskException( "Classname must not be null." ); | |||||
} | |||||
if( ! m_fork ) | |||||
{ | { | ||||
if( m_sysProperties != null ) | |||||
if( m_jar != null ) | |||||
{ | { | ||||
m_sysProperties.setSystem(); | |||||
throw new TaskException( "Cannot execute a jar in non-forked mode." ); | |||||
} | } | ||||
final Class[] param = {Class.forName( "[Ljava.lang.String;" )}; | |||||
Class target = null; | |||||
if( m_classpath == null ) | |||||
if( m_vmArgs.size() > 0 ) | |||||
{ | { | ||||
target = Class.forName( classname ); | |||||
context.warn( "JVM args ignored when same JVM is used." ); | |||||
} | } | ||||
else | |||||
if( m_workingDirectory != null ) | |||||
{ | { | ||||
final URL[] urls = PathUtil.toURLs( m_classpath ); | |||||
final URLClassLoader classLoader = new URLClassLoader( urls ); | |||||
target = classLoader.loadClass( classname ); | |||||
context.warn( "Working directory ignored when same JVM is used." ); | |||||
} | |||||
if( m_sysProperties.size() > 0 ) | |||||
{ | |||||
context.warn( "System properties ignored when same JVM is used." ); | |||||
} | } | ||||
final Method main = target.getMethod( "main", param ); | |||||
main.invoke( null, argument ); | |||||
} | } | ||||
catch( NullPointerException e ) | |||||
if( m_fork ) | |||||
{ | { | ||||
throw new TaskException( "Could not find main() method in " + classname ); | |||||
execForked( context ); | |||||
} | } | ||||
catch( ClassNotFoundException e ) | |||||
else | |||||
{ | { | ||||
throw new TaskException( "Could not find " + classname + ". Make sure you have it in your classpath" ); | |||||
execNonForked( context ); | |||||
} | } | ||||
catch( InvocationTargetException e ) | |||||
} | |||||
/** | |||||
* Executes the app in this JVM. | |||||
*/ | |||||
private void execNonForked( final TaskContext context ) | |||||
throws TaskException | |||||
{ | |||||
final String[] args = m_args.getArguments(); | |||||
context.debug( "Running in same VM: " + m_className + " " + FileUtils.formatCommandLine( args ) ); | |||||
// Locate the class | |||||
final Class target; | |||||
try | |||||
{ | { | ||||
Throwable t = e.getTargetException(); | |||||
if( !( t instanceof SecurityException ) ) | |||||
final URL[] urls = PathUtil.toURLs( m_classPath ); | |||||
if( urls.length == 0 ) | |||||
{ | { | ||||
throw new TaskException( "Error", t ); | |||||
target = Class.forName( m_className ); | |||||
} | } | ||||
else | else | ||||
{ | { | ||||
throw (SecurityException)t; | |||||
final URLClassLoader classLoader = new URLClassLoader( urls ); | |||||
target = classLoader.loadClass( m_className ); | |||||
} | } | ||||
} | } | ||||
catch( Exception e ) | |||||
catch( final Exception e ) | |||||
{ | { | ||||
throw new TaskException( "Error", e ); | |||||
throw new TaskException( "Could not find class \"" + m_className + "\".", e ); | |||||
} | } | ||||
finally | |||||
// Call the main method | |||||
try | |||||
{ | { | ||||
if( m_sysProperties != null ) | |||||
{ | |||||
m_sysProperties.restoreSystem(); | |||||
} | |||||
final Class[] params = { args.getClass() }; | |||||
final Method main = target.getMethod( "main", params ); | |||||
main.invoke( null, new Object[] { args } ); | |||||
} | |||||
catch( final InvocationTargetException e ) | |||||
{ | |||||
final Throwable t = e.getTargetException(); | |||||
throw new TaskException( "Could not execute class \"" + m_className + "\".", t ); | |||||
} | |||||
catch( final Exception e ) | |||||
{ | |||||
throw new TaskException( "Could not execute class \"" + m_className + "\".", e ); | |||||
} | |||||
} | |||||
/** | |||||
* Executes the given classname with the given arguments in a separate VM. | |||||
*/ | |||||
private void execForked( final TaskContext context ) | |||||
throws TaskException | |||||
{ | |||||
final Execute exe = new Execute(); | |||||
exe.setWorkingDirectory( m_workingDirectory ); | |||||
// Setup the command line | |||||
final Commandline command = exe.getCommandline(); | |||||
// Executable name | |||||
if( m_jvm != null ) | |||||
{ | |||||
command.setExecutable( m_jvm ); | |||||
} | |||||
else | |||||
{ | |||||
command.setExecutable( getJavaExecutableName() ); | |||||
} | |||||
// JVM arguments | |||||
final String[] vmArgs = m_vmArgs.getArguments(); | |||||
command.addArguments( vmArgs ); | |||||
// Max memory size | |||||
if( m_maxMemory != null ) | |||||
{ | |||||
command.addArgument( "-Xmx" + m_maxMemory ); | |||||
} | |||||
// System properties | |||||
final String[] props = m_sysProperties.getJavaVariables(); | |||||
command.addArguments( props ); | |||||
// Classpath | |||||
if( ! m_classPath.isEmpty() ) | |||||
{ | |||||
command.addArgument( "-classpath" ); | |||||
command.addArgument( PathUtil.formatPath( m_classPath ) ); | |||||
} | |||||
// What to execute | |||||
if( m_jar != null ) | |||||
{ | |||||
command.addArgument( "-jar" ); | |||||
command.addArgument( m_jar ); | |||||
} | |||||
else | |||||
{ | |||||
command.addArgument( m_className ); | |||||
} | |||||
// Java app arguments | |||||
final String[] args = m_args.getArguments(); | |||||
command.addArguments( args ); | |||||
// Execute | |||||
exe.execute( context ); | |||||
} | |||||
/** | |||||
* Determines the executable name for the java command for this JVM. | |||||
* | |||||
* @todo Move this to somewhere in AUT. | |||||
*/ | |||||
public static String getJavaExecutableName() | |||||
{ | |||||
if( Os.isFamily( Os.OS_FAMILY_NETWARE ) ) | |||||
{ | |||||
// NetWare may have a "java" in the JRE directory, but 99% of | |||||
// the time, you don't want to execute it -- Jeff Tulley | |||||
// <JTULLEY@novell.com> | |||||
return "java"; | |||||
} | |||||
// Figure out the basename | |||||
final String baseName; | |||||
if( Os.isFamily( Os.OS_FAMILY_WINDOWS) || Os.isFamily( Os.OS_FAMILY_DOS ) ) | |||||
{ | |||||
baseName = "java.exe"; | |||||
} | |||||
else | |||||
{ | |||||
baseName = "java"; | |||||
} | |||||
// Look for java in the ${java.home{/../bin directory. Unfortunately | |||||
// 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. | |||||
File javaExe = | |||||
new File( System.getProperty( "java.home" ) + "/../bin/" + baseName ); | |||||
if( javaExe.exists() ) | |||||
{ | |||||
return javaExe.getAbsolutePath(); | |||||
} | |||||
else | |||||
{ | |||||
return "java"; | |||||
} | } | ||||
} | } | ||||
} | } |
@@ -8,14 +8,9 @@ | |||||
package org.apache.tools.todo.taskdefs; | package org.apache.tools.todo.taskdefs; | ||||
import java.io.File; | import java.io.File; | ||||
import java.util.ArrayList; | |||||
import org.apache.aut.nativelib.ExecManager; | |||||
import org.apache.myrmidon.api.AbstractTask; | import org.apache.myrmidon.api.AbstractTask; | ||||
import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
import org.apache.myrmidon.framework.Execute; | |||||
import org.apache.tools.todo.types.Argument; | import org.apache.tools.todo.types.Argument; | ||||
import org.apache.tools.todo.types.Commandline; | |||||
import org.apache.tools.todo.types.CommandlineJava; | |||||
import org.apache.tools.todo.types.EnvironmentVariable; | import org.apache.tools.todo.types.EnvironmentVariable; | ||||
import org.apache.tools.todo.types.Path; | import org.apache.tools.todo.types.Path; | ||||
@@ -26,20 +21,20 @@ import org.apache.tools.todo.types.Path; | |||||
* @author Stefano Mazzocchi <a href="mailto:stefano@apache.org"> | * @author Stefano Mazzocchi <a href="mailto:stefano@apache.org"> | ||||
* 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> | ||||
* | |||||
* @ant:task name="java" | |||||
*/ | */ | ||||
public class Java | public class Java | ||||
extends AbstractTask | extends AbstractTask | ||||
{ | { | ||||
private CommandlineJava m_cmdl = new CommandlineJava(); | |||||
private boolean m_fork; | |||||
private File m_dir; | |||||
private final ExecuteJava m_exec = new ExecuteJava(); | |||||
/** | /** | ||||
* Set the class name. | * Set the class name. | ||||
*/ | */ | ||||
public void setClassname( String s ) | |||||
public void setClassname( final String className ) | |||||
{ | { | ||||
m_cmdl.setClassname( s ); | |||||
m_exec.setClassName( className ); | |||||
} | } | ||||
/** | /** | ||||
@@ -48,7 +43,7 @@ public class Java | |||||
public void addClasspath( final Path classpath ) | public void addClasspath( final Path classpath ) | ||||
throws TaskException | throws TaskException | ||||
{ | { | ||||
m_cmdl.createClasspath().addPath( classpath ); | |||||
m_exec.getClassPath().addPath( classpath ); | |||||
} | } | ||||
/** | /** | ||||
@@ -58,7 +53,7 @@ public class Java | |||||
*/ | */ | ||||
public void setDir( final File dir ) | public void setDir( final File dir ) | ||||
{ | { | ||||
m_dir = dir; | |||||
m_exec.setWorkingDirectory( dir ); | |||||
} | } | ||||
/** | /** | ||||
@@ -66,23 +61,23 @@ public class Java | |||||
*/ | */ | ||||
public void setFork( final boolean fork ) | public void setFork( final boolean fork ) | ||||
{ | { | ||||
m_fork = fork; | |||||
m_exec.setFork( fork ); | |||||
} | } | ||||
/** | /** | ||||
* set the jar name... | |||||
* Set the jar name. | |||||
*/ | */ | ||||
public void setJar( final File jar ) | public void setJar( final File jar ) | ||||
{ | { | ||||
m_cmdl.setJar( jar.getAbsolutePath() ); | |||||
m_exec.setJar( jar ); | |||||
} | } | ||||
/** | /** | ||||
* Set the command used to start the VM (only if fork==false). | |||||
* Set the command used to start the VM (only if fork==true). | |||||
*/ | */ | ||||
public void setJvm( final String jvm ) | public void setJvm( final String jvm ) | ||||
{ | { | ||||
m_cmdl.setVm( jvm ); | |||||
m_exec.setJvm( jvm ); | |||||
} | } | ||||
/** | /** | ||||
@@ -90,7 +85,7 @@ public class Java | |||||
*/ | */ | ||||
public void setMaxmemory( final String max ) | public void setMaxmemory( final String max ) | ||||
{ | { | ||||
m_cmdl.setMaxmemory( max ); | |||||
m_exec.setMaxMemory( max ); | |||||
} | } | ||||
/** | /** | ||||
@@ -98,7 +93,7 @@ public class Java | |||||
*/ | */ | ||||
public void addSysproperty( final EnvironmentVariable sysp ) | public void addSysproperty( final EnvironmentVariable sysp ) | ||||
{ | { | ||||
m_cmdl.addSysproperty( sysp ); | |||||
m_exec.getSysProperties().addVariable( sysp ); | |||||
} | } | ||||
/** | /** | ||||
@@ -106,7 +101,7 @@ public class Java | |||||
*/ | */ | ||||
public void addArg( final Argument argument ) | public void addArg( final Argument argument ) | ||||
{ | { | ||||
m_cmdl.addArgument( argument ); | |||||
m_exec.getArguments().addArgument( argument ); | |||||
} | } | ||||
/** | /** | ||||
@@ -114,102 +109,12 @@ public class Java | |||||
*/ | */ | ||||
public void addJvmarg( final Argument argument ) | public void addJvmarg( final Argument argument ) | ||||
{ | { | ||||
m_cmdl.addVmArgument( argument ); | |||||
m_exec.getVmArguments().addArgument( argument ); | |||||
} | } | ||||
public void execute() | public void execute() | ||||
throws TaskException | throws TaskException | ||||
{ | { | ||||
executeJava(); | |||||
} | |||||
/** | |||||
* Do the execution. | |||||
* | |||||
* @exception org.apache.myrmidon.api.TaskException Description of Exception | |||||
*/ | |||||
public void executeJava() | |||||
throws TaskException | |||||
{ | |||||
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( !m_fork && jar != null ) | |||||
{ | |||||
throw new TaskException( "Cannot execute a jar in non-forked mode. Please set fork='true'. " ); | |||||
} | |||||
if( m_fork ) | |||||
{ | |||||
getContext().debug( "Forking " + m_cmdl.toString() ); | |||||
run( new Commandline( m_cmdl.getCommandline() ) ); | |||||
} | |||||
else | |||||
{ | |||||
if( m_cmdl.getVmCommand().size() > 1 ) | |||||
{ | |||||
getContext().warn( "JVM args ignored when same JVM is used." ); | |||||
} | |||||
if( m_dir != null ) | |||||
{ | |||||
getContext().warn( "Working directory ignored when same JVM is used." ); | |||||
} | |||||
getContext().debug( "Running in same VM " + m_cmdl.getJavaCommand().toString() ); | |||||
run( m_cmdl ); | |||||
} | |||||
} | |||||
/** | |||||
* Executes the given classname with the given arguments as it was a command | |||||
* line application. | |||||
*/ | |||||
protected void run( final String classname, final ArrayList args ) | |||||
throws TaskException | |||||
{ | |||||
final CommandlineJava java = new CommandlineJava(); | |||||
java.setClassname( classname ); | |||||
final int size = args.size(); | |||||
for( int i = 0; i < size; i++ ) | |||||
{ | |||||
final String arg = (String)args.get( i ); | |||||
java.addArgument( arg ); | |||||
} | |||||
run( java ); | |||||
} | |||||
/** | |||||
* Executes the given classname with the given arguments as it was a command | |||||
* line application. | |||||
*/ | |||||
private void run( final CommandlineJava command ) | |||||
throws TaskException | |||||
{ | |||||
final ExecuteJava exe = new ExecuteJava(); | |||||
exe.setJavaCommand( command.getJavaCommand() ); | |||||
exe.setClasspath( command.getClasspath() ); | |||||
exe.setSystemProperties( command.getSystemProperties() ); | |||||
exe.execute(); | |||||
} | |||||
/** | |||||
* Executes the given classname with the given arguments in a separate VM. | |||||
*/ | |||||
private void run( final Commandline command ) | |||||
throws TaskException | |||||
{ | |||||
final Execute exe = new Execute(); | |||||
exe.setWorkingDirectory( m_dir ); | |||||
exe.setCommandline( command ); | |||||
exe.execute( getContext() ); | |||||
m_exec.execute( getContext() ); | |||||
} | } | ||||
} | } |
@@ -12,9 +12,8 @@ import java.util.ArrayList; | |||||
import java.util.Date; | import java.util.Date; | ||||
import java.util.StringTokenizer; | import java.util.StringTokenizer; | ||||
import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
import org.apache.tools.todo.taskdefs.Java; | |||||
import org.apache.tools.todo.taskdefs.ExecuteJava; | |||||
import org.apache.tools.todo.taskdefs.MatchingTask; | import org.apache.tools.todo.taskdefs.MatchingTask; | ||||
import org.apache.tools.todo.types.Argument; | |||||
import org.apache.tools.todo.types.DirectoryScanner; | import org.apache.tools.todo.types.DirectoryScanner; | ||||
import org.apache.tools.todo.types.Path; | import org.apache.tools.todo.types.Path; | ||||
import org.apache.tools.todo.types.PathUtil; | import org.apache.tools.todo.types.PathUtil; | ||||
@@ -172,9 +171,6 @@ 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 = null;//(Java)getProject().createTask( "java" ); | |||||
helperTask.setFork( true ); | |||||
helperTask.setClassname( "weblogic.jspc" ); | |||||
String[] args = new String[ 12 ]; | String[] args = new String[ 12 ]; | ||||
File jspFile = null; | File jspFile = null; | ||||
@@ -220,19 +216,13 @@ public class WLJspc extends MatchingTask | |||||
} | } | ||||
args[ j + 2 ] = sourceDirectory + File.separator + (String)filesToDo.get( i ); | args[ j + 2 ] = sourceDirectory + File.separator + (String)filesToDo.get( i ); | ||||
arg = ""; | |||||
for( int x = 0; x < 12; x++ ) | |||||
{ | |||||
arg += " " + args[ x ]; | |||||
} | |||||
System.out.println( "arg = " + arg ); | |||||
//helperTask.clearArgs(); | |||||
helperTask.addArg( new Argument( arg ) ); | |||||
helperTask.addClasspath( compileClasspath ); | |||||
helperTask.executeJava(); | |||||
ExecuteJava helperTask = new ExecuteJava(); | |||||
helperTask.setFork( true ); | |||||
helperTask.setClassName( "weblogic.jspc" ); | |||||
helperTask.getArguments().addArguments( args ); | |||||
helperTask.getClassPath().addPath( compileClasspath ); | |||||
helperTask.execute( getContext() ); | |||||
} | } | ||||
} | } | ||||
@@ -7,12 +7,11 @@ | |||||
*/ | */ | ||||
package org.apache.tools.todo.types; | package org.apache.tools.todo.types; | ||||
import java.io.File; | |||||
import org.apache.aut.nativelib.Os; | |||||
import org.apache.avalon.excalibur.util.StringUtil; | import org.apache.avalon.excalibur.util.StringUtil; | ||||
import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
import org.apache.tools.todo.types.Argument; | import org.apache.tools.todo.types.Argument; | ||||
import org.apache.tools.todo.types.Commandline; | import org.apache.tools.todo.types.Commandline; | ||||
import org.apache.tools.todo.taskdefs.ExecuteJava; | |||||
/** | /** | ||||
* 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 | ||||
@@ -39,7 +38,7 @@ public class CommandlineJava | |||||
public CommandlineJava() | public CommandlineJava() | ||||
{ | { | ||||
setVm( getJavaExecutableName() ); | |||||
setVm( ExecuteJava.getJavaExecutableName() ); | |||||
} | } | ||||
/** | /** | ||||
@@ -71,7 +70,7 @@ public class CommandlineJava | |||||
*/ | */ | ||||
public void setMaxmemory( String max ) | public void setMaxmemory( String max ) | ||||
{ | { | ||||
this.m_maxMemory = max; | |||||
m_maxMemory = max; | |||||
} | } | ||||
public void setSystemProperties() | public void setSystemProperties() | ||||
@@ -261,31 +260,4 @@ public class CommandlineJava | |||||
} | } | ||||
return actualVMCommand; | return actualVMCommand; | ||||
} | } | ||||
private String getJavaExecutableName() | |||||
{ | |||||
// This is the most common extension case - exe for windows and OS/2, | |||||
// nothing for *nix. | |||||
String extension = Os.isFamily( Os.OS_FAMILY_DOS ) ? ".exe" : ""; | |||||
// Look for java in the java.home/../bin directory. Unfortunately | |||||
// 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. | |||||
File jExecutable = | |||||
new File( System.getProperty( "java.home" ) + | |||||
"/../bin/java" + extension ); | |||||
if( jExecutable.exists() && !Os.isFamily( Os.OS_FAMILY_NETWARE ) ) | |||||
{ | |||||
// NetWare may have a "java" in that directory, but 99% of | |||||
// the time, you don't want to execute it -- Jeff Tulley | |||||
// <JTULLEY@novell.com> | |||||
return jExecutable.getAbsolutePath(); | |||||
} | |||||
else | |||||
{ | |||||
return "java"; | |||||
} | |||||
} | |||||
} | } |
@@ -44,24 +44,13 @@ public class SysProperties | |||||
} | } | ||||
} | } | ||||
/** | |||||
* @todo move this to AUT | |||||
*/ | |||||
public String[] getJavaVariables() | public String[] getJavaVariables() | ||||
throws TaskException | throws TaskException | ||||
{ | { | ||||
String props[] = new String[ 0 ]; | |||||
try | |||||
{ | |||||
props = toNativeFormat( super.getVariables() ); | |||||
} | |||||
catch( final ExecException ee ) | |||||
{ | |||||
throw new TaskException( ee.getMessage(), ee ); | |||||
} | |||||
if( props == null ) | |||||
{ | |||||
return null; | |||||
} | |||||
String props[] = toNativeFormat( super.getVariables() ); | |||||
for( int i = 0; i < props.length; i++ ) | for( int i = 0; i < props.length; i++ ) | ||||
{ | { | ||||
props[ i ] = "-D" + props[ i ]; | props[ i ] = "-D" + props[ i ]; | ||||
@@ -108,7 +97,6 @@ public class SysProperties | |||||
} | } | ||||
private String[] toNativeFormat( final Properties environment ) | private String[] toNativeFormat( final Properties environment ) | ||||
throws ExecException | |||||
{ | { | ||||
final ArrayList newEnvironment = new ArrayList(); | final ArrayList newEnvironment = new ArrayList(); | ||||
@@ -189,7 +189,7 @@ public class FileUtils | |||||
* @todo Move to {@link org.apache.aut.nativelib.Os}, and get rid of the | * @todo Move to {@link org.apache.aut.nativelib.Os}, and get rid of the | ||||
* exception. | * exception. | ||||
*/ | */ | ||||
public static String buildCommandLine( final String[] arguments ) | |||||
public static String formatCommandLine( final String[] arguments ) | |||||
throws TaskException | throws TaskException | ||||
{ | { | ||||
final StringBuffer cmd = new StringBuffer(); | final StringBuffer cmd = new StringBuffer(); | ||||