diff --git a/src/main/org/apache/tools/ant/taskdefs/Ant.java b/src/main/org/apache/tools/ant/taskdefs/Ant.java index bc78c5ff0..7c6227f47 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Ant.java +++ b/src/main/org/apache/tools/ant/taskdefs/Ant.java @@ -205,6 +205,7 @@ public class Ant extends Task { // Are we trying to call the target in which we are defined? if (p1.getBaseDir().equals(project.getBaseDir()) && p1.getProperty("ant.file").equals(project.getProperty("ant.file")) && + getOwningTarget() != null && target.equals(this.getOwningTarget().getName())) { throw new BuildException("ant task calling its own parent target"); diff --git a/src/main/org/apache/tools/ant/taskdefs/CallTarget.java b/src/main/org/apache/tools/ant/taskdefs/CallTarget.java index f767bb867..0ee7e9ec5 100644 --- a/src/main/org/apache/tools/ant/taskdefs/CallTarget.java +++ b/src/main/org/apache/tools/ant/taskdefs/CallTarget.java @@ -82,6 +82,7 @@ public class CallTarget extends Task { private Ant callee; private String subTarget; + private boolean initialized = false; public void init() { callee = (Ant) project.createTask("ant"); @@ -89,9 +90,14 @@ public class CallTarget extends Task { callee.setTaskName(getTaskName()); callee.setLocation(location); callee.init(); + initialized = true; } public void execute() { + if (!initialized) { + init(); + } + if (subTarget == null) { throw new BuildException("Attribute target is required.", location);