git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@895567 13f79535-47bb-0310-9956-ffa450edef68master
@@ -1040,6 +1040,9 @@ Other changes: | |||
* a new filterreader appendtolines complements prefixlines. | |||
* a new top level element extension-point allows build files to be | |||
extended with custom targets more easily. | |||
Changes from Ant 1.7.0 TO Ant 1.7.1 | |||
============================================= | |||
@@ -29,7 +29,7 @@ | |||
<h3>Concepts</h3> | |||
<ul class="inlinelist"> | |||
<li><a href="targets.html">Targets and Target-Groups</a></li> | |||
<li><a href="targets.html">Targets and Extension-Points</a></li> | |||
<li><a href="properties.html">Properties and PropertyHelpers</a></li> | |||
<li><a href="clonevm.html">ant.build.clonevm</a></li> | |||
<li><a href="sysclasspath.html">build.sysclasspath</a></li> | |||
@@ -19,7 +19,7 @@ | |||
<head> | |||
<meta http-equiv="Content-Language" content="en-us"/> | |||
<link rel="stylesheet" type="text/css" href="stylesheets/style.css"/> | |||
<title>Targets and Target-Groups</title> | |||
<title>Targets and Extension-Points</title> | |||
</head> | |||
<body> | |||
@@ -199,9 +199,9 @@ | |||
<td align="center" valign="top">No</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">group</td> | |||
<td valign="top">extensionOf</td> | |||
<td valign="top">Adds the current target to the depends list of | |||
the named <a href="#target-groups">target-group</a>. | |||
the named <a href="#extension-points">extension-point</a>. | |||
<em>since Ant 1.8.0.</em></td> | |||
<td align="center" valign="top">No</td> | |||
</tr> | |||
@@ -225,11 +225,11 @@ | |||
don't use Ants main class as entry point and calling them from the IDE | |||
is usually possible.</p> | |||
<h1><a name="target-groups">Target-Groups</a></h1> | |||
<h1><a name="extension-points">Extension-Points</a></h1> | |||
<p><em>since Ant 1.8.0.</em></p> | |||
<p>Target-Groups are similar to targets in that they have a name and | |||
<p>Extension-Points are similar to targets in that they have a name and | |||
a depends list and can be executed from the command line. Just | |||
like targets they represent a state during the build process.</p> | |||
@@ -237,18 +237,18 @@ | |||
is to collect targets that contribute to the desired state in | |||
their depends list.</p> | |||
<p>Targets can add themselves to a target-group's depends list via | |||
their group attribute. The targets that add themselves will be | |||
<p>Targets can add themselves to an extension-points's depends list via | |||
their extensionOf attribute. The targets that add themselves will be | |||
added after the targets of the explicit depends-attribute of the | |||
target-group, if multiple targets add themselves, their relative | |||
extension-point, if multiple targets add themselves, their relative | |||
order is not defined.</p> | |||
<p>The main purpose of a target-group is to act as an extension | |||
<p>The main purpose of an extension-point is to act as an extension | |||
point for build files designed to | |||
be <a href="CoreTasks\import.html">imported</a>. In the imported | |||
file a target-groups defines a state that must be reached and | |||
file an extension-point defines a state that must be reached and | |||
targets from other build files can join the depends list of said | |||
target-group in order to contribute to that state.</p> | |||
extension-point in order to contribute to that state.</p> | |||
<p>For example your imported build file may need to compile code, it | |||
might look like:</p> | |||
@@ -256,7 +256,7 @@ | |||
<target name="create-directory-layout"> | |||
... | |||
</target> | |||
<target-group name="ready-to-compile" | |||
<extension-point name="ready-to-compile" | |||
depends="create-directory-layout"/> | |||
<target name="compile" depends="ready-to-compile"> | |||
... | |||
@@ -270,7 +270,7 @@ | |||
your main build file you may use something like</p> | |||
<blockquote><pre> | |||
<target name="generate-sources" | |||
group="ready-to-compile"> | |||
extensionOf="ready-to-compile"> | |||
... | |||
</target> | |||
</pre></blockquote> | |||
@@ -18,17 +18,18 @@ | |||
package org.apache.tools.ant; | |||
/** | |||
* A special kind of target that must be empty. | |||
* An extension point build files can provide as a place where other | |||
* build files can add new dependencies. | |||
* | |||
* @since Ant 1.8.0 | |||
*/ | |||
public class TargetGroup extends Target { | |||
public class ExtensionPoint extends Target { | |||
// no "clone" constructor since I'm not really sure where it is | |||
// used | |||
private static final String NO_CHILDREN_ALLOWED | |||
= "you must not nest child elements into a target-group"; | |||
= "you must not nest child elements into an extension-point"; | |||
/** | |||
* Throws an exception. |
@@ -18,13 +18,13 @@ | |||
package org.apache.tools.ant.helper; | |||
import org.apache.tools.ant.BuildException; | |||
import org.apache.tools.ant.ExtensionPoint; | |||
import org.apache.tools.ant.Location; | |||
import org.apache.tools.ant.MagicNames; | |||
import org.apache.tools.ant.Project; | |||
import org.apache.tools.ant.ProjectHelper; | |||
import org.apache.tools.ant.RuntimeConfigurable; | |||
import org.apache.tools.ant.Target; | |||
import org.apache.tools.ant.TargetGroup; | |||
import org.apache.tools.ant.Task; | |||
import org.apache.tools.ant.UnknownElement; | |||
import org.apache.tools.ant.types.Resource; | |||
@@ -825,19 +825,19 @@ public class ProjectHelper2 extends ProjectHelper { | |||
* @exception org.xml.sax.SAXParseException if the tag given is not | |||
* <code>"taskdef"</code>, <code>"typedef"</code>, | |||
* <code>"property"</code>, <code>"target"</code>, | |||
* <code>"target-group"</code> | |||
* <code>"extension-point"</code> | |||
* or a data type definition | |||
*/ | |||
public AntHandler onStartChild(String uri, String name, String qname, Attributes attrs, | |||
AntXMLContext context) throws SAXParseException { | |||
return (name.equals("target") || name.equals("target-group")) | |||
return (name.equals("target") || name.equals("extension-point")) | |||
&& (uri.equals("") || uri.equals(ANT_CORE_URI)) | |||
? ProjectHelper2.targetHandler : ProjectHelper2.elementHandler; | |||
} | |||
} | |||
/** | |||
* Handler for "target" and "target-group" elements. | |||
* Handler for "target" and "extension-point" elements. | |||
*/ | |||
public static class TargetHandler extends AntHandler { | |||
@@ -865,11 +865,11 @@ public class ProjectHelper2 extends ProjectHelper { | |||
AntXMLContext context) throws SAXParseException { | |||
String name = null; | |||
String depends = ""; | |||
String targetGroup = null; | |||
String extensionPoint = null; | |||
Project project = context.getProject(); | |||
Target target = "target".equals(tag) | |||
? new Target() : new TargetGroup(); | |||
? new Target() : new ExtensionPoint(); | |||
target.setProject(project); | |||
target.setLocation(new Location(context.getLocator())); | |||
context.addTarget(target); | |||
@@ -899,8 +899,8 @@ public class ProjectHelper2 extends ProjectHelper { | |||
} | |||
} else if (key.equals("description")) { | |||
target.setDescription(value); | |||
} else if (key.equals("target-group")) { | |||
targetGroup = value; | |||
} else if (key.equals("extensionOf")) { | |||
extensionPoint = value; | |||
} else { | |||
throw new SAXParseException("Unexpected attribute \"" + key + "\"", context | |||
.getLocator()); | |||
@@ -969,9 +969,9 @@ public class ProjectHelper2 extends ProjectHelper { | |||
context.getCurrentTargets().put(newName, newTarget); | |||
project.addOrReplaceTarget(newName, newTarget); | |||
} | |||
if (targetGroup != null) { | |||
if (extensionPoint != null) { | |||
for (Iterator iter = | |||
Target.parseDepends(targetGroup, name, "target-group") | |||
Target.parseDepends(extensionPoint, name, "extensionOf") | |||
.iterator(); | |||
iter.hasNext(); ) { | |||
String tgName = (String) iter.next(); | |||
@@ -980,16 +980,16 @@ public class ProjectHelper2 extends ProjectHelper { | |||
} | |||
if (!projectTargets.containsKey(tgName)) { | |||
throw new BuildException("can't add target " | |||
+ name + " to target-group " | |||
+ name + " to extension-point " | |||
+ tgName | |||
+ " because the target-group" | |||
+ " because the extension-point" | |||
+ " is unknown."); | |||
} | |||
Target t = (Target) projectTargets.get(tgName); | |||
if (!(t instanceof TargetGroup)) { | |||
if (!(t instanceof ExtensionPoint)) { | |||
throw new BuildException("referenced target " | |||
+ tgName | |||
+ " is not a target-group"); | |||
+ " is not an extension-point"); | |||
} | |||
t.addDependency(name); | |||
} | |||
@@ -229,7 +229,7 @@ public class AntStructure extends Task { | |||
out.println(""); | |||
out.print("<!ELEMENT project (target | target-group | "); | |||
out.print("<!ELEMENT project (target | extension-point | "); | |||
out.print(TASKS); | |||
out.print(" | "); | |||
out.print(TYPES); | |||
@@ -252,9 +252,9 @@ public class AntStructure extends Task { | |||
out.println(")*>"); | |||
out.println(""); | |||
printTargetAttrs(out, "target"); | |||
out.println("<!ELEMENT target-group EMPTY>"); | |||
out.println("<!ELEMENT extension-point EMPTY>"); | |||
out.println(""); | |||
printTargetAttrs(out, "target-group"); | |||
printTargetAttrs(out, "extension-point"); | |||
} | |||
/** | |||
@@ -268,7 +268,7 @@ public class AntStructure extends Task { | |||
out.println(" if CDATA #IMPLIED"); | |||
out.println(" unless CDATA #IMPLIED"); | |||
out.println(" depends CDATA #IMPLIED"); | |||
out.println(" target-group CDATA #IMPLIED"); | |||
out.println(" extensionOf CDATA #IMPLIED"); | |||
out.println(" description CDATA #IMPLIED>"); | |||
out.println(""); | |||
} | |||
@@ -19,7 +19,7 @@ | |||
<import file="../antunit-base.xml"/> | |||
<target-group name="testTargetGroupWorksLikeTarget" | |||
<extension-point name="testExtensionPointWorksLikeTarget" | |||
depends="setProperty, assertProperty"/> | |||
<target name="setProperty"> | |||
@@ -30,26 +30,26 @@ | |||
<au:assertPropertyEquals name="foo" value="bar"/> | |||
</target> | |||
<target name="testTargetGroupMustBeEmpty"> | |||
<target name="testExtensionPointMustBeEmpty"> | |||
<mkdir dir="${output}"/> | |||
<echo file="${output}/build.xml"><![CDATA[ | |||
<project> | |||
<target-group name="foo"> | |||
<extension-point name="foo"> | |||
<echo>bar</echo> | |||
</target-group> | |||
</extension-point> | |||
</project>]]></echo> | |||
<au:expectfailure | |||
expectedMessage="you must not nest child elements into a target-group"> | |||
expectedMessage="you must not nest child elements into an extension-point"> | |||
<ant dir="${output}"/> | |||
</au:expectfailure> | |||
</target> | |||
<target name="testAddToTargetGroup"> | |||
<target name="testAddToExtensionPoint"> | |||
<mkdir dir="${output}"/> | |||
<echo file="${output}/build.xml"><![CDATA[ | |||
<project default="foo"> | |||
<target-group name="foo"/> | |||
<target name="bar" target-group="foo"> | |||
<extension-point name="foo"/> | |||
<target name="bar" extensionOf="foo"> | |||
<echo>In target bar</echo> | |||
</target> | |||
</project>]]></echo> | |||
@@ -57,15 +57,15 @@ | |||
<au:assertLogContains text="In target bar"/> | |||
</target> | |||
<target name="testTargetGroupMustBeKnown"> | |||
<target name="testExtensionPointMustBeKnown"> | |||
<mkdir dir="${output}"/> | |||
<echo file="${output}/build.xml"><![CDATA[ | |||
<project default="foo"> | |||
<target-group name="bar" target-group="foo"/> | |||
<target-group name="foo"/> | |||
<extension-point name="bar" extensionOf="foo"/> | |||
<extension-point name="foo"/> | |||
</project>]]></echo> | |||
<au:expectfailure | |||
expectedMessage="can't add target bar to target-group foo because the target-group is unknown"> | |||
expectedMessage="can't add target bar to extension-point foo because the extension-point is unknown"> | |||
<ant dir="${output}"/> | |||
</au:expectfailure> | |||
</target> | |||
@@ -75,10 +75,10 @@ | |||
<echo file="${output}/build.xml"><![CDATA[ | |||
<project default="foo"> | |||
<target name="foo"/> | |||
<target name="bar" target-group="foo"/> | |||
<target name="bar" extensionOf="foo"/> | |||
</project>]]></echo> | |||
<au:expectfailure | |||
expectedMessage="referenced target foo is not a target-group"> | |||
expectedMessage="referenced target foo is not an extension-point"> | |||
<ant dir="${output}"/> | |||
</au:expectfailure> | |||
</target> |