diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/framework/exec/launchers/PerlCommandLauncher.java b/proposal/myrmidon/src/java/org/apache/myrmidon/framework/exec/launchers/PerlCommandLauncher.java new file mode 100644 index 000000000..16d4992c3 --- /dev/null +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/framework/exec/launchers/PerlCommandLauncher.java @@ -0,0 +1,55 @@ +/* + * Copyright (C) The Apache Software Foundation. All rights reserved. + * + * This software is published under the terms of the Apache Software License + * version 1.1, a copy of which has been included with this distribution in + * the LICENSE.txt file. + */ +package org.apache.myrmidon.framework.exec.launchers; + +import java.io.IOException; +import java.io.File; +import org.apache.myrmidon.api.TaskException; +import org.apache.myrmidon.framework.exec.CommandLauncher; +import org.apache.myrmidon.framework.exec.ExecMetaData; +import org.apache.avalon.excalibur.io.FileUtil; + +/** + * A command launcher that uses an auxiliary script to launch commands in + * directories other than the current working directory. + * + * @author Peter Donald + * @author Thomas Haas + * @version $Revision$ $Date$ + */ +public class PerlCommandLauncher + implements CommandLauncher +{ + private String m_script; + + public PerlCommandLauncher( final String script ) + { + m_script = script; + } + + /** + * Launches the given command in a new process using cmd.exe to + * set the working directory. + */ + public Process exec( final ExecMetaData metaData ) + throws IOException, TaskException + { + final File homeDir = ExecUtil.getAntHomeDirectory(); + final String script = FileUtil.resolveFile( homeDir, m_script ).toString(); + + // Build the command + final String[] prefix = new String[ 3 ]; + prefix[ 0 ] = "perl"; + prefix[ 1 ] = script; + prefix[ 2 ] = metaData.getWorkingDirectory().getCanonicalPath(); + + final ExecMetaData newMetaData = ExecUtil.prepend( metaData, prefix ); + return Runtime.getRuntime(). + exec( newMetaData.getCommand(), newMetaData.getEnvironment() ); + } +} diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/framework/exec/launchers/ScriptCommandLauncher.java b/proposal/myrmidon/src/java/org/apache/myrmidon/framework/exec/launchers/ScriptCommandLauncher.java new file mode 100644 index 000000000..81ff04dfb --- /dev/null +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/framework/exec/launchers/ScriptCommandLauncher.java @@ -0,0 +1,54 @@ +/* + * Copyright (C) The Apache Software Foundation. All rights reserved. + * + * This software is published under the terms of the Apache Software License + * version 1.1, a copy of which has been included with this distribution in + * the LICENSE.txt file. + */ +package org.apache.myrmidon.framework.exec.launchers; + +import java.io.IOException; +import java.io.File; +import org.apache.myrmidon.api.TaskException; +import org.apache.myrmidon.framework.exec.CommandLauncher; +import org.apache.myrmidon.framework.exec.ExecMetaData; +import org.apache.avalon.excalibur.io.FileUtil; + +/** + * A command launcher that uses an auxiliary script to launch commands in + * directories other than the current working directory. + * + * @author Peter Donald + * @author Thomas Haas + * @version $Revision$ $Date$ + */ +public class ScriptCommandLauncher + implements CommandLauncher +{ + private String m_script; + + public ScriptCommandLauncher( final String script ) + { + m_script = script; + } + + /** + * Launches the given command in a new process using cmd.exe to + * set the working directory. + */ + public Process exec( final ExecMetaData metaData ) + throws IOException, TaskException + { + final File homeDir = ExecUtil.getAntHomeDirectory(); + final String script = FileUtil.resolveFile( homeDir, m_script ).toString(); + + // Build the command + final String[] prefix = new String[ 2 ]; + prefix[ 0 ] = script; + prefix[ 1 ] = metaData.getWorkingDirectory().getCanonicalPath(); + + final ExecMetaData newMetaData = ExecUtil.prepend( metaData, prefix ); + return Runtime.getRuntime(). + exec( newMetaData.getCommand(), newMetaData.getEnvironment() ); + } +}