This reminds me of another bug I forgot
to report.

If <ant/> is called without setting target,
the default target is called. If there is
no default target, the "" target is called.
This means that the top-level tasks are
called twice.

Example:

hello.xml
<project>
  <echo>Hello world</echo>
</project>

build.xml
...
   <ant antfile="hello.xml"/>


The solution is not to execute the target if
the target is "".


On Wednesday 10 September 2003 14:17, [EMAIL PROTECTED] wrote:
> bodewig     2003/09/10 06:17:00
>
>   Modified:    src/main/org/apache/tools/ant/taskdefs Ant.java
>   Log:
>   It is legal to omit the target attribute in <ant>, don't die with a NPE
>
Index: src/main/org/apache/tools/ant/taskdefs/Ant.java
===================================================================
RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/Ant.java,v
retrieving revision 1.88
diff -u -r1.88 Ant.java
--- src/main/org/apache/tools/ant/taskdefs/Ant.java	10 Sep 2003 13:17:00 -0000	1.88
+++ src/main/org/apache/tools/ant/taskdefs/Ant.java	10 Sep 2003 13:30:09 -0000
@@ -62,6 +62,8 @@
 import java.util.Enumeration;
 import java.util.Hashtable;
 import java.util.Vector;
+import java.util.Set;
+import java.util.HashSet;
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.BuildListener;
 import org.apache.tools.ant.DefaultLogger;
@@ -409,9 +411,9 @@
             addReferences();
 
             if (target != null) {
-                newProject.executeTarget(target);
-            } else {
-                newProject.executeTarget("");
+                if (!"".equals(target)) {
+                    newProject.executeTarget(target);
+                }
             }
         } finally {
             // help the gc
@@ -441,6 +443,16 @@
      * @throws BuildException under unknown circumstances
      */
     private void overrideProperties() throws BuildException {
+        // remove duplicate properties - last property wins
+        Set set = new HashSet();
+        for (int i = properties.size() - 1; i >= 0; --i) {
+            Property p = (Property) properties.get(i);
+            if (set.contains(p.getName())) {
+                properties.remove(i);
+            } else {
+                set.add(p.getName());
+            }
+        }
         Enumeration e = properties.elements();
         while (e.hasMoreElements()) {
             Property p = (Property) e.nextElement();

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to