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]

Reply via email to