Author: stevel Date: Thu Jul 13 04:11:21 2006 New Revision: 421588 URL: http://svn.apache.org/viewvc?rev=421588&view=rev Log: This is a little bit of fun; something asked for on the mail list. You can now use -main to specify a new entry point for ant, so if you override ant.Main with a subclass, you can switch to that.
It has a side effect of making ant a generic launcher of things; anything that implements AntMain.startAnt. Modified: ant/core/trunk/src/main/org/apache/tools/ant/Main.java ant/core/trunk/src/main/org/apache/tools/ant/launch/Launcher.java Modified: ant/core/trunk/src/main/org/apache/tools/ant/Main.java URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/Main.java?rev=421588&r1=421587&r2=421588&view=diff ============================================================================== --- ant/core/trunk/src/main/org/apache/tools/ant/Main.java (original) +++ ant/core/trunk/src/main/org/apache/tools/ant/Main.java Thu Jul 13 04:11:21 2006 @@ -26,6 +26,8 @@ import java.util.Enumeration; import java.util.Properties; import java.util.Vector; +import java.util.HashMap; + import org.apache.tools.ant.input.DefaultInputHandler; import org.apache.tools.ant.input.InputHandler; import org.apache.tools.ant.launch.AntMain; @@ -271,7 +273,7 @@ /** * Process command line arguments. - * When ant is started from Launcher, the -lib argument does not get + * When ant is started from Launcher, launcher-only arguments doe not get * passed through to this routine. * * @param args the command line arguments. @@ -282,6 +284,15 @@ String searchForThis = null; PrintStream logTo = null; + //this is hte list of lu + HashMap launchCommands =new HashMap(); + launchCommands.put("-lib",""); + launchCommands.put("-cp", ""); + launchCommands.put("-noclasspath", ""); + launchCommands.put("--noclasspath", ""); + launchCommands.put("-nouserlib", ""); + launchCommands.put("--nouserlib", ""); + launchCommands.put("-main", ""); // cycle through given args for (int i = 0; i < args.length; i++) { @@ -431,7 +442,7 @@ throw new BuildException( "Niceness value is out of the range 1-10"); } - } else if (arg.equals("-cp") || arg.equals("-lib")) { + } else if (launchCommands.get(arg)!=null) { //catch script/ant mismatch with a meaningful message //we could ignore it, but there are likely to be other //version problems, so we stamp down on the configuration now @@ -445,7 +456,7 @@ } else if (arg.startsWith("-")) { // we don't have any more args to recognize! String msg = "Unknown argument: " + arg; - System.out.println(msg); + System.err.println(msg); printUsage(); throw new BuildException(""); } else { @@ -835,7 +846,9 @@ msg.append(" -nouserlib Run ant without using the jar files from" + lSep + " ${user.home}/.ant/lib" + lSep); msg.append(" -noclasspath Run ant without using CLASSPATH" + lSep); - msg.append(" -noproxy Java 1.5 only: do not use the OS proxies"); + msg.append(" -noproxy Java 1.5 only: do not use the OS proxies" + + lSep); + msg.append(" -main <class> override Ant's normal entry point"); System.out.println(msg.toString()); } Modified: ant/core/trunk/src/main/org/apache/tools/ant/launch/Launcher.java URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/launch/Launcher.java?rev=421588&r1=421587&r2=421588&view=diff ============================================================================== --- ant/core/trunk/src/main/org/apache/tools/ant/launch/Launcher.java (original) +++ ant/core/trunk/src/main/org/apache/tools/ant/launch/Launcher.java Thu Jul 13 04:11:21 2006 @@ -95,16 +95,24 @@ * @param args commandline arguments */ public static void main(String[] args) { + int exitCode; try { Launcher launcher = new Launcher(); - launcher.run(args); + exitCode=launcher.run(args); } catch (LaunchException e) { + exitCode=-1; System.err.println(e.getMessage()); } catch (Throwable t) { - t.printStackTrace(); + exitCode=-1; + t.printStackTrace(System.err); + } + if(exitCode!=0) { + System.exit(exitCode); } } + + /** * Add a CLASSPATH or -lib to lib path urls. * @@ -138,17 +146,19 @@ * Run the launcher to launch Ant. * * @param args the command line arguments - * + * @return an exit code. As the normal ant main calls exit when it ends, + * this is for handling failures at bind-time * @exception MalformedURLException if the URLs required for the classloader * cannot be created. */ - private void run(String[] args) + private int run(String[] args) throws LaunchException, MalformedURLException { String antHomeProperty = System.getProperty(MagicNames.ANT_HOME); File antHome = null; File sourceJar = Locator.getClassSource(getClass()); File jarDir = sourceJar.getParentFile(); + String mainClassname = MAIN_CLASS; if (antHomeProperty != null) { antHome = new File(antHomeProperty); @@ -192,6 +202,12 @@ noUserLib = true; } else if (args[i].equals("--noclasspath") || args[i].equals("-noclasspath")) { noClassPath = true; + } else if (args[i].equals("-main")) { + if (i == args.length - 1) { + throw new LaunchException("The -main argument must " + + "be followed by a library location"); + } + mainClassname = args[++i]; } else { argList.add(args[i]); } @@ -273,19 +289,24 @@ URLClassLoader loader = new URLClassLoader(jars); Thread.currentThread().setContextClassLoader(loader); Class mainClass = null; + int exitCode=0; try { - mainClass = loader.loadClass(MAIN_CLASS); + mainClass = loader.loadClass(mainClassname); AntMain main = (AntMain) mainClass.newInstance(); main.startAnt(newArgs, null, null); } catch (InstantiationException ex) { - System.out.println( - "Incompatible version of org.apache.tools.ant detected"); + System.err.println( + "Incompatible version of "+mainClassname+" detected"); File mainJar = Locator.getClassSource(mainClass); - System.out.println( + System.err.println( "Location of this class " + mainJar); + exitCode=-1; } catch (Throwable t) { - t.printStackTrace(); + t.printStackTrace(System.err); + exitCode=-1; } + return exitCode; + } } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]