diff --git a/proposal/anteater/source/coretasks/buildtarget/org/apache/ant/buildtarget/BuildTargetTask.java b/proposal/anteater/source/coretasks/buildtarget/org/apache/ant/buildtarget/BuildTargetTask.java
new file mode 100644
index 000000000..cead59f17
--- /dev/null
+++ b/proposal/anteater/source/coretasks/buildtarget/org/apache/ant/buildtarget/BuildTargetTask.java
@@ -0,0 +1,67 @@
+package org.apache.ant.buildtarget;
+
+import org.apache.ant.*;
+
+/**
+ * A simple task that builds a target if a property is set to true
+ *
+ * @author James Duncan Davidson (duncan@apache.org)
+ */
+public class BuildTargetTask extends AbstractTask {
+
+ // -----------------------------------------------------------------
+ // PRIVATE DATA MEMBERS
+ // -----------------------------------------------------------------
+
+ /**
+ * Data to echo
+ */
+ private String ifProperty;
+
+ /**
+ * Target to execute
+ */
+ private String targetName;
+
+ // -----------------------------------------------------------------
+ // PUBLIC METHODS
+ // -----------------------------------------------------------------
+
+ /**
+ * Executes this task.
+ */
+ public boolean execute() throws AntException {
+ // XXX should really check internal state before proceeding! Target
+ // has to be set...
+
+ // XXX oh, and we should really check to see if the target exists
+ // and fail out if it doesn't. :)
+
+ if (ifProperty != null) {
+ String ifPropertyValue = project.getProperty(ifProperty);
+ if (ifPropertyValue.equals("true")) {
+ project.startBuild(targetName);
+ return true;
+ } else {
+ return true;
+ }
+ } else {
+ project.startBuild(targetName);
+ return true;
+ }
+ }
+
+ /**
+ * Sets the property that will be examined
+ */
+ public void setIf(String ifProperty) {
+ this.ifProperty = ifProperty;
+ }
+
+ /**
+ * Sets the target to be executed
+ */
+ public void setTarget(String targetName) {
+ this.targetName = targetName;
+ }
+}
\ No newline at end of file
diff --git a/proposal/anteater/source/coretasks/buildtarget/taskdef.properties b/proposal/anteater/source/coretasks/buildtarget/taskdef.properties
new file mode 100644
index 000000000..ecc450666
--- /dev/null
+++ b/proposal/anteater/source/coretasks/buildtarget/taskdef.properties
@@ -0,0 +1,4 @@
+# taskdef.properties for Echo task
+
+tasks=buildtarget
+task.buildtarget.class=org.apache.ant.buildtarget.BuildTargetTask
\ No newline at end of file
diff --git a/proposal/anteater/source/main.ant b/proposal/anteater/source/main.ant
index cb0b93c44..d56ee636d 100644
--- a/proposal/anteater/source/main.ant
+++ b/proposal/anteater/source/main.ant
@@ -8,10 +8,11 @@
Primary buildfile for building Ant itself
-
+
+
diff --git a/proposal/anteater/source/main/org/apache/ant/Project.java b/proposal/anteater/source/main/org/apache/ant/Project.java
index 0a522b8e9..f2160a535 100644
--- a/proposal/anteater/source/main/org/apache/ant/Project.java
+++ b/proposal/anteater/source/main/org/apache/ant/Project.java
@@ -234,6 +234,7 @@ public class Project {
public void startBuild(String targetName) throws AntException {
// notify FrontEnd that we are starting a build on a project
+
frontEnd.notifyProjectStart(this);
Target target = getTarget(targetName);
diff --git a/proposal/anteater/source/main/org/apache/ant/TaskManager.java b/proposal/anteater/source/main/org/apache/ant/TaskManager.java
index b9552a9e0..5d79c4910 100644
--- a/proposal/anteater/source/main/org/apache/ant/TaskManager.java
+++ b/proposal/anteater/source/main/org/apache/ant/TaskManager.java
@@ -47,7 +47,6 @@ public class TaskManager {
* Creates a new TaskManager.
*/
TaskManager(FrontEnd frontEnd) {
- System.out.println("CREATING TM");
this.frontEnd = frontEnd;
}
@@ -58,7 +57,7 @@ public class TaskManager {
/**
* Adds a node to the task path
*/
- public void addTaskPathNode(File file) {
+ public void addTaskPathNode(File file) throws AntException {
taskPathNodes.addElement(file);
processTaskPathNode(file);
}
@@ -141,7 +140,7 @@ public class TaskManager {
/**
* Processes a jar file to get class definitions from it
*/
- private void processJar(File file) {
+ private void processJar(File file) throws AntException {
frontEnd.writeMessage("Scanning " + file + " for tasks",
FrontEnd.MSG_LEVEL_LOW);
try {
@@ -155,8 +154,14 @@ public class TaskManager {
Enumeration enum = getTaskNames(props);
while (enum.hasMoreElements()) {
+
String taskName = (String)enum.nextElement();
String taskClass = props.getProperty("task." + taskName + ".class");
+ if (taskClass == null) {
+ String msg = "No class definition for task " + taskName +
+ "in jar file " + file;
+ throw new AntException(msg);
+ }
URLClassLoader loader = new URLClassLoader(new URL[] {file.toURL()});
try {
Class clazz = loader.loadClass(taskClass);
@@ -183,7 +188,7 @@ public class TaskManager {
* Processes a node of the task path searching for task definitions there
* and adding them to the list of known tasks
*/
- private void processTaskPathNode(File file) {
+ private void processTaskPathNode(File file) throws AntException {
// task path nodes can be any of the following:
// * jar file
@@ -214,7 +219,7 @@ public class TaskManager {
* system directory, and then installation. This allows users or
* system admins to override or add tasks.
*/
- private void setUpTaskPath() {
+ private void setUpTaskPath() throws AntException {
// 1st, add user's home dir.
diff --git a/proposal/anteater/source/main/org/apache/ant/cli/CLIFrontEnd.java b/proposal/anteater/source/main/org/apache/ant/cli/CLIFrontEnd.java
index 53655cfa8..3c6151080 100644
--- a/proposal/anteater/source/main/org/apache/ant/cli/CLIFrontEnd.java
+++ b/proposal/anteater/source/main/org/apache/ant/cli/CLIFrontEnd.java
@@ -141,7 +141,14 @@ public class CLIFrontEnd extends FrontEnd {
return;
} else {
// XXX need to separate on path seps so that real paths can be taken
- taskManager.addTaskPathNode(new File(argTaskpath));
+ try {
+ taskManager.addTaskPathNode(new File(argTaskpath));
+ } catch (AntException ae) {
+ System.out.println(ae);
+ System.out.println(ae.getMessage());
+ ae.printStackTrace(System.out);
+ return;
+ }
}
}