git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@271722 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -27,3 +27,6 @@ java -classpath bootstrap\lib\start.jar;bootstrap\lib\init.jar org.apache.ant.st | |||
| REM Use the full build as the build used by the build script | |||
| xcopy /s dist bootstrap | |||
| REM clean up after bootstrap | |||
| java -classpath bootstrap\lib\start.jar:bootstrap\lib\init.jar org.apache.ant.start.Main clean | |||
| @@ -35,7 +35,8 @@ | |||
| </path> | |||
| <target name="buildsetup"> | |||
| <available file="../checkstyle" property="checkstyle.available"/> | |||
| <available classname="com.puppycrawl.tools.checkstyle.CheckStyleTask" | |||
| property="checkstyle.available"/> | |||
| <mkdir dir="${bin.dir}"/> | |||
| <mkdir dir="${distlib.dir}"/> | |||
| <copy todir="${distlib.dir}/parser"> | |||
| @@ -99,6 +100,14 @@ | |||
| <attribute name="Main-Class" value="org.apache.ant.start.Main"/> | |||
| <attribute name="Class-Path" value="init.jar"/> | |||
| </manifest> | |||
| <include name="org/apache/ant/**/*"/> | |||
| </jar> | |||
| <jar basedir="${bin.dir}/start" jarfile="${distlib.dir}/ant.jar"> | |||
| <manifest> | |||
| <attribute name="Main-Class" value="org.apache.tools.ant.Main"/> | |||
| <attribute name="Class-Path" value="start.jar"/> | |||
| </manifest> | |||
| <include name="org/apache/tools/ant/**/*"/> | |||
| </jar> | |||
| </target> | |||
| @@ -155,14 +164,8 @@ | |||
| <target name="main" depends="cli, antlibs, ant1compat, remote, checkstyle"/> | |||
| <target name="checkstyle" if="checkstyle.available"> | |||
| <property name="checkstyle.bin" value="../checkstyle"/> | |||
| <path id="checkstyle.path"> | |||
| <fileset dir="${checkstyle.bin}"/> | |||
| </path> | |||
| <taskdef name="checkstyle" | |||
| classname="com.puppycrawl.tools.checkstyle.CheckStyleTask"> | |||
| <classpath refid="checkstyle.path"/> | |||
| </taskdef> | |||
| classname="com.puppycrawl.tools.checkstyle.CheckStyleTask"/> | |||
| <mkdir dir="${bin.dir}/check"/> | |||
| <checkstyle maxlinelen="80" | |||
| memberpattern="[a-z].*" | |||
| @@ -32,8 +32,6 @@ | |||
| <patternset id="converted"> | |||
| <exclude name="org/apache/tools/ant/taskdefs/Ant.java"/> | |||
| <exclude name="org/apache/tools/ant/taskdefs/CallTarget.java"/> | |||
| <exclude name="org/apache/tools/ant/taskdefs/Parallel.java"/> | |||
| <exclude name="org/apache/tools/ant/taskdefs/Sequential.java"/> | |||
| </patternset> | |||
| <fileset id="ant1src" dir="../../src/main"> | |||
| @@ -68,6 +66,7 @@ | |||
| <fileset dir="${lib.dir}/parser" includes="*.jar"/> | |||
| <fileset dir="${lib.dir}/ant1compat" includes="*.jar"/> | |||
| <pathelement location="${distlib.dir}/common/common.jar"/> | |||
| <pathelement location="${distlib.dir}/antlibs/system.tsk"/> | |||
| </path> | |||
| <target name="check_for_optional_packages"> | |||
| @@ -317,11 +317,34 @@ public class ComponentManager implements ComponentService { | |||
| * on the component type. | |||
| * @exception ExecutionException if the component cannot be created | |||
| */ | |||
| public Object createComponent(String componentName) | |||
| throws ExecutionException { | |||
| public Object createComponent(String componentName) | |||
| throws ExecutionException { | |||
| return createComponent(componentName, null); | |||
| } | |||
| /** | |||
| * Create a component given its class. The component will have a context | |||
| * but will not be configured. It should be configured using the | |||
| * appropriate set methods and then validated before being used. | |||
| * | |||
| * @param componentClass the component's class | |||
| * @param factory the factory to create the component | |||
| * @param loader the classloader associated with the component | |||
| * @param addTaskAdapter whenther the returned component should be a | |||
| * task, potentially being wrapped in an adapter | |||
| * @param componentName the name of the component type | |||
| * @return the created component. The return type of this method depends | |||
| * on the component type. | |||
| * @exception ExecutionException if the component cannot be created | |||
| */ | |||
| public Object createComponent(AntLibFactory factory, ClassLoader loader, | |||
| Class componentClass, boolean addTaskAdapter, | |||
| String componentName) | |||
| throws ExecutionException { | |||
| return createComponent(loader, factory, componentClass, | |||
| componentName, componentName, addTaskAdapter, null); | |||
| } | |||
| /** | |||
| * Set the standard libraries (i.e. those which are independent of the | |||
| * build files) to be used in this component manager | |||
| @@ -421,82 +444,39 @@ public class ComponentManager implements ComponentService { | |||
| protected Object createComponent(String componentName, BuildElement model) | |||
| throws ExecutionException { | |||
| Location location = Location.UNKNOWN_LOCATION; | |||
| if (model != null) { | |||
| location = model.getLocation(); | |||
| } | |||
| ImportInfo definition = getDefinition(componentName); | |||
| if (definition == null) { | |||
| throw new ExecutionException("There is no definition of the <" | |||
| + componentName + "> component"); | |||
| + componentName + "> component"); | |||
| } | |||
| String className = definition.getClassName(); | |||
| ComponentLibrary componentLibrary | |||
| = definition.getComponentLibrary(); | |||
| boolean isTask = definition.getDefinitionType() == AntLibrary.TASKDEF; | |||
| String localName = definition.getLocalName(); | |||
| try { | |||
| ClassLoader componentLoader = componentLibrary.getClassLoader(); | |||
| Class componentClass | |||
| = Class.forName(className, true, componentLoader); | |||
| AntLibFactory libFactory = getLibFactory(componentLibrary); | |||
| Location location = Location.UNKNOWN_LOCATION; | |||
| if (model != null) { | |||
| location = model.getLocation(); | |||
| } | |||
| Object component | |||
| = libFactory.createComponent(componentClass, localName); | |||
| ExecutionComponent execComponent = null; | |||
| if (definition.getDefinitionType() == AntLibrary.TASKDEF) { | |||
| if (component instanceof Task) { | |||
| execComponent = (Task)component; | |||
| } else { | |||
| execComponent = new TaskAdapter(componentName, component); | |||
| } | |||
| } else if (component instanceof ExecutionComponent) { | |||
| execComponent = (ExecutionComponent)component; | |||
| } | |||
| ExecutionContext context | |||
| = new ExecutionContext(frame, execComponent, location); | |||
| context.setClassLoader(componentLoader); | |||
| ClassLoader currentLoader | |||
| = LoaderUtils.setContextLoader(componentLoader); | |||
| if (execComponent != null) { | |||
| execComponent.init(context, componentName); | |||
| } | |||
| if (model != null) { | |||
| configureElement(libFactory, component, model); | |||
| if (execComponent != null) { | |||
| execComponent.validateComponent(); | |||
| } | |||
| } | |||
| LoaderUtils.setContextLoader(currentLoader); | |||
| if (execComponent != null) { | |||
| return execComponent; | |||
| } | |||
| return component; | |||
| return createComponent(componentLoader, libFactory, componentClass, | |||
| componentName, localName, isTask, model); | |||
| } catch (ClassNotFoundException e) { | |||
| throw new ExecutionException("Class " + className | |||
| + " for component <" + componentName + "> was not found", e, | |||
| model.getLocation()); | |||
| location); | |||
| } catch (NoClassDefFoundError e) { | |||
| throw new ExecutionException("Could not load a dependent class (" | |||
| + e.getMessage() + ") for component " + componentName, | |||
| e, model.getLocation()); | |||
| } catch (InstantiationException e) { | |||
| throw new ExecutionException("Unable to instantiate component " | |||
| + "class " + className + " for component <" + componentName | |||
| + ">", e, model.getLocation()); | |||
| } catch (IllegalAccessException e) { | |||
| throw new ExecutionException("Unable to access task class " | |||
| + className + " for component <" + componentName + ">", | |||
| e, model.getLocation()); | |||
| e, location); | |||
| } catch (ExecutionException e) { | |||
| e.setLocation(model.getLocation(), false); | |||
| throw e; | |||
| } catch (RuntimeException e) { | |||
| throw new ExecutionException(e.getClass().getName() + ": " | |||
| + e.getMessage(), e, model.getLocation()); | |||
| } | |||
| } | |||
| @@ -545,6 +525,100 @@ public class ComponentManager implements ComponentService { | |||
| return setter; | |||
| } | |||
| /** | |||
| * Create a component - handles all the variations | |||
| * | |||
| * @param loader the component's classloader | |||
| * @param componentClass The class of the component. | |||
| * @param componentName The component's name in the global context | |||
| * @param addTaskAdapter whether the component should add a Task adapter | |||
| * to make this component a Task. | |||
| * @param localName The name of the component within its library | |||
| * @param model the BuildElement model of the component's configuration | |||
| * @param factory the facrtory object used to create the component | |||
| * @return the required component potentially wrapped in a wrapper | |||
| * object. | |||
| * @exception ExecutionException if the component cannot be created | |||
| */ | |||
| private Object createComponent(ClassLoader loader, AntLibFactory factory, | |||
| Class componentClass, String componentName, | |||
| String localName, boolean addTaskAdapter, | |||
| BuildElement model) | |||
| throws ExecutionException { | |||
| // set the location to unknown unless we have a build model to use | |||
| Location location = Location.UNKNOWN_LOCATION; | |||
| if (model != null) { | |||
| location = model.getLocation(); | |||
| } | |||
| try { | |||
| // create the component using the factory | |||
| Object component | |||
| = factory.createComponent(componentClass, localName); | |||
| // wrap the component in an adapter if required. | |||
| ExecutionComponent execComponent = null; | |||
| if (addTaskAdapter) { | |||
| if (component instanceof Task) { | |||
| execComponent = (Task)component; | |||
| } else { | |||
| execComponent = new TaskAdapter(componentName, component); | |||
| } | |||
| } else if (component instanceof ExecutionComponent) { | |||
| execComponent = (ExecutionComponent)component; | |||
| } | |||
| // set the context loader to that for the component | |||
| ClassLoader currentLoader | |||
| = LoaderUtils.setContextLoader(loader); | |||
| // if the component is an execution component create a context and | |||
| // initialise the component with it. | |||
| if (execComponent != null) { | |||
| ExecutionContext context | |||
| = new ExecutionContext(frame, execComponent, location); | |||
| context.setClassLoader(loader); | |||
| execComponent.init(context, componentName); | |||
| } | |||
| // if we have a model, use it to configure the component. Otherwise | |||
| // the caller is expected to configure thre object | |||
| if (model != null) { | |||
| configureElement(factory, component, model); | |||
| // if the component is an execution component and we have a | |||
| // model, validate it | |||
| if (execComponent != null) { | |||
| execComponent.validateComponent(); | |||
| } | |||
| } | |||
| // reset the loader | |||
| LoaderUtils.setContextLoader(currentLoader); | |||
| // if we have an execution component, potentially a wrapper, | |||
| // return it otherwise the component directly | |||
| if (execComponent != null) { | |||
| return execComponent; | |||
| } else { | |||
| return component; | |||
| } | |||
| } catch (InstantiationException e) { | |||
| throw new ExecutionException("Unable to instantiate component " | |||
| + "class " + componentClass.getName() + " for component <" | |||
| + componentName + ">", e, location); | |||
| } catch (IllegalAccessException e) { | |||
| throw new ExecutionException("Unable to access task class " | |||
| + componentClass.getName() + " for component <" | |||
| + componentName + ">", e, location); | |||
| } catch (ExecutionException e) { | |||
| e.setLocation(location, false); | |||
| throw e; | |||
| } catch (RuntimeException e) { | |||
| throw new ExecutionException(e.getClass().getName() + ": " | |||
| + e.getMessage(), e, location); | |||
| } | |||
| } | |||
| /** | |||
| * Create an instance of a type given its required class | |||
| * | |||
| @@ -154,7 +154,7 @@ public class CoreExecService implements ExecService { | |||
| Throwable failureCause = null; | |||
| try { | |||
| ClassLoader currentLoader | |||
| = LoaderUtils.setContextLoader(execContext.getLoader()); | |||
| = LoaderUtils.setContextLoader(execContext.getClassLoader()); | |||
| task.execute(); | |||
| LoaderUtils.setContextLoader(currentLoader); | |||
| } catch (Throwable e) { | |||
| @@ -160,11 +160,11 @@ public class ExecutionContext implements AntContext { | |||
| } | |||
| /** | |||
| * Gets the loader for this task | |||
| * Gets the loader for this context | |||
| * | |||
| * @return the task's loader | |||
| * @return the context's loader | |||
| */ | |||
| protected ClassLoader getLoader() { | |||
| public ClassLoader getClassLoader() { | |||
| return loader; | |||
| } | |||
| @@ -1,14 +1,13 @@ | |||
| <antlib libid="ant.ant1compat" | |||
| home="http://jakarta.apache.org/ant" | |||
| reqxml="true" reqtools="true"> | |||
| reqxml="true" reqtools="true" | |||
| extends="ant.system"> | |||
| <factory classname="org.apache.tools.ant.Ant1Factory"/> | |||
| <converter classname="org.apache.tools.ant.Ant1Converter"/> | |||
| <!-- typedefs --> | |||
| <taskdef name="ant" classname="org.apache.tools.ant.taskdefs.Ant"/> | |||
| <taskdef name="antcall" classname="org.apache.tools.ant.taskdefs.CallTarget"/> | |||
| <taskdef name="antlr" classname="org.apache.tools.ant.taskdefs.optional.ANTLR"/> | |||
| <taskdef name="antstructure" classname="org.apache.tools.ant.taskdefs.AntStructure"/> | |||
| <taskdef name="apply" classname="org.apache.tools.ant.taskdefs.Transform"/> | |||
| @@ -89,7 +88,6 @@ | |||
| <taskdef name="p4label" classname="org.apache.tools.ant.taskdefs.optional.perforce.P4Label"/> | |||
| <taskdef name="p4submit" classname="org.apache.tools.ant.taskdefs.optional.perforce.P4Submit"/> | |||
| <taskdef name="p4sync" classname="org.apache.tools.ant.taskdefs.optional.perforce.P4Sync"/> | |||
| <taskdef name="parallel" classname="org.apache.tools.ant.taskdefs.Parallel"/> | |||
| <taskdef name="patch" classname="org.apache.tools.ant.taskdefs.Patch"/> | |||
| <taskdef name="pathconvert" classname="org.apache.tools.ant.taskdefs.PathConvert"/> | |||
| <taskdef name="property" classname="org.apache.tools.ant.taskdefs.Property"/> | |||
| @@ -102,7 +100,6 @@ | |||
| <taskdef name="rmic" classname="org.apache.tools.ant.taskdefs.Rmic"/> | |||
| <taskdef name="rpm" classname="org.apache.tools.ant.taskdefs.optional.Rpm"/> | |||
| <taskdef name="script" classname="org.apache.tools.ant.taskdefs.optional.Script"/> | |||
| <taskdef name="sequential" classname="org.apache.tools.ant.taskdefs.Sequential"/> | |||
| <taskdef name="signjar" classname="org.apache.tools.ant.taskdefs.SignJar"/> | |||
| <taskdef name="sleep" classname="org.apache.tools.ant.taskdefs.Sleep"/> | |||
| <taskdef name="soscheckin" classname="org.apache.tools.ant.taskdefs.optional.sos.SOSCheckin"/> | |||
| @@ -870,24 +870,59 @@ public class Project implements org.apache.ant.common.event.BuildListener { | |||
| * @return the created task instance | |||
| */ | |||
| public Task createTask(String taskType) { | |||
| // we piggy back the task onto the current context | |||
| Task task = null; | |||
| Class c = (Class)taskClassDefinitions.get(taskType); | |||
| Class taskClass = (Class)taskClassDefinitions.get(taskType); | |||
| if (c == null) { | |||
| if (taskClass == null) { | |||
| return null; | |||
| } | |||
| try { | |||
| task = (Task)c.newInstance(); | |||
| task.setProject(this); | |||
| task.init(context, taskType); | |||
| Object taskObject = componentService.createComponent(factory, | |||
| context.getClassLoader(), taskClass, false, taskType); | |||
| if (taskObject instanceof Task) { | |||
| task = (Task)taskObject; | |||
| } else { | |||
| TaskAdapter adapter = new TaskAdapter(); | |||
| adapter.setProxy(taskObject); | |||
| task = adapter; | |||
| } | |||
| task.setTaskType(taskType); | |||
| task.setTaskName(taskType); | |||
| return task; | |||
| } catch (Throwable e) { | |||
| throw new BuildException(e); | |||
| } | |||
| } | |||
| /** | |||
| * Creates a new instance of a data type. | |||
| * | |||
| * @param typeName The name of the data type to create an instance of. | |||
| * Must not be <code>null</code>. | |||
| * | |||
| * @return an instance of the specified data type, or <code>null</code> if | |||
| * the data type name is not recognised. | |||
| * | |||
| * @exception BuildException if the data type name is recognised but | |||
| * instance creation fails. | |||
| */ | |||
| public Object createDataType(String typeName) throws BuildException { | |||
| Class typeClass = (Class)dataClassDefinitions.get(typeName); | |||
| if (typeClass == null) { | |||
| return null; | |||
| } | |||
| try { | |||
| Object dataInstance = componentService.createComponent(factory, | |||
| context.getClassLoader(), typeClass, false, typeName); | |||
| return dataInstance; | |||
| } catch (Throwable e) { | |||
| throw new BuildException(e); | |||
| } | |||
| } | |||
| /** send build started event to the listeners */ | |||
| protected void fireBuildStarted() { | |||
| BuildEvent event = new BuildEvent(this); | |||
| @@ -133,7 +133,7 @@ public abstract class Task extends ProjectComponent | |||
| /** | |||
| * Add a nested task to this Ant1 task. | |||
| * Add a nested task to this Ant1 task. | |||
| * | |||
| * @param task The task to be added | |||
| * @exception ExecutionException if the task cannot be added. | |||
| @@ -173,6 +173,10 @@ public abstract class Task extends ProjectComponent | |||
| } | |||
| /** Initialise this task */ | |||
| public void init() { | |||
| } | |||
| /** Validate this component */ | |||
| public void validateComponent() { | |||
| // no default validation for Ant1 tasks | |||
| @@ -0,0 +1,64 @@ | |||
| /* | |||
| * The Apache Software License, Version 1.1 | |||
| * | |||
| * Copyright (c) 2002 The Apache Software Foundation. All rights | |||
| * reserved. | |||
| * | |||
| * Redistribution and use in source and binary forms, with or without | |||
| * modification, are permitted provided that the following conditions | |||
| * are met: | |||
| * | |||
| * 1. Redistributions of source code must retain the above copyright | |||
| * notice, this list of conditions and the following disclaimer. | |||
| * | |||
| * 2. Redistributions in binary form must reproduce the above copyright | |||
| * notice, this list of conditions and the following disclaimer in | |||
| * the documentation and/or other materials provided with the | |||
| * distribution. | |||
| * | |||
| * 3. The end-user documentation included with the redistribution, if | |||
| * any, must include the following acknowlegement: | |||
| * "This product includes software developed by the | |||
| * Apache Software Foundation (http://www.apache.org/)." | |||
| * Alternately, this acknowlegement may appear in the software itself, | |||
| * if and wherever such third-party acknowlegements normally appear. | |||
| * | |||
| * 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
| * Foundation" must not be used to endorse or promote products derived | |||
| * from this software without prior written permission. For written | |||
| * permission, please contact apache@apache.org. | |||
| * | |||
| * 5. Products derived from this software may not be called "Apache" | |||
| * nor may "Apache" appear in their names without prior written | |||
| * permission of the Apache Group. | |||
| * | |||
| * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||
| * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
| * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
| * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||
| * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||
| * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||
| * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
| * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||
| * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||
| * SUCH DAMAGE. | |||
| * ==================================================================== | |||
| * | |||
| * This software consists of voluntary contributions made by many | |||
| * individuals on behalf of the Apache Software Foundation. For more | |||
| * information on the Apache Software Foundation, please see | |||
| * <http://www.apache.org/>. | |||
| */ | |||
| package org.apache.tools.ant; | |||
| /** | |||
| * Ant facade over system version of Ant | |||
| * | |||
| * @author <a href="mailto:conor@apache.org">Conor MacNeill</a> | |||
| * @created 31 January 2002 | |||
| */ | |||
| public class Ant extends org.apache.ant.antlib.system.Ant { | |||
| } | |||
| @@ -0,0 +1,66 @@ | |||
| /* | |||
| * The Apache Software License, Version 1.1 | |||
| * | |||
| * Copyright (c) 2002 The Apache Software Foundation. All rights | |||
| * reserved. | |||
| * | |||
| * Redistribution and use in source and binary forms, with or without | |||
| * modification, are permitted provided that the following conditions | |||
| * are met: | |||
| * | |||
| * 1. Redistributions of source code must retain the above copyright | |||
| * notice, this list of conditions and the following disclaimer. | |||
| * | |||
| * 2. Redistributions in binary form must reproduce the above copyright | |||
| * notice, this list of conditions and the following disclaimer in | |||
| * the documentation and/or other materials provided with the | |||
| * distribution. | |||
| * | |||
| * 3. The end-user documentation included with the redistribution, if | |||
| * any, must include the following acknowlegement: | |||
| * "This product includes software developed by the | |||
| * Apache Software Foundation (http://www.apache.org/)." | |||
| * Alternately, this acknowlegement may appear in the software itself, | |||
| * if and wherever such third-party acknowlegements normally appear. | |||
| * | |||
| * 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
| * Foundation" must not be used to endorse or promote products derived | |||
| * from this software without prior written permission. For written | |||
| * permission, please contact apache@apache.org. | |||
| * | |||
| * 5. Products derived from this software may not be called "Apache" | |||
| * nor may "Apache" appear in their names without prior written | |||
| * permission of the Apache Group. | |||
| * | |||
| * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||
| * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
| * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
| * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||
| * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||
| * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||
| * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
| * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||
| * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||
| * SUCH DAMAGE. | |||
| * ==================================================================== | |||
| * | |||
| * This software consists of voluntary contributions made by many | |||
| * individuals on behalf of the Apache Software Foundation. For more | |||
| * information on the Apache Software Foundation, please see | |||
| * <http://www.apache.org/>. | |||
| */ | |||
| package org.apache.tools.ant; | |||
| import org.apache.ant.antlib.system.AntCall; | |||
| /** | |||
| * CallTarget facade over AntCall | |||
| * | |||
| * @author <a href="mailto:conor@apache.org">Conor MacNeill</a> | |||
| * @created 31 January 2002 | |||
| */ | |||
| public class CallTarget extends AntCall { | |||
| } | |||
| @@ -1,5 +1,4 @@ | |||
| package org.apache.ant.builder; | |||
| public class Ant1CompatBuilder { | |||
| protected void _init(BuildHelper helper) { | |||
| helper.setProperty("src.dir", "src"); | |||
| @@ -16,10 +15,13 @@ public class Ant1CompatBuilder { | |||
| helper.setProperty("util.package", "${ant.package}/util"); | |||
| helper.setProperty("regexp.package", "${util.package}/regexp"); | |||
| helper.createPath("classpath"); | |||
| helper.addFileSetToPath("classpath", "${lib.dir}/parser", "*.jar"); | |||
| helper.addFileSetToPath("classpath", "${lib.dir}/ant1compat", "*.jar"); | |||
| helper.addFileSetToPath("classpath", | |||
| "${lib.dir}/parser", "*.jar"); | |||
| helper.addFileSetToPath("classpath", | |||
| "${lib.dir}/ant1compat", "*.jar"); | |||
| helper.addPathElementToPath("classpath", "${distlib.dir}/init.jar"); | |||
| helper.addPathElementToPath("classpath", "${distlib.dir}/common/common.jar"); | |||
| helper.addPathElementToPath("classpath", "${distlib.dir}/antlibs/system.tsk"); | |||
| } | |||
| protected void check_for_optional_packages(BuildHelper helper) { | |||
| } | |||
| @@ -10,7 +10,8 @@ public class MutantBuilder { | |||
| helper.setProperty("distlib.dir", "${dist.dir}/lib"); | |||
| helper.setProperty("debug", "true"); | |||
| helper.createPath("classpath.parser"); | |||
| helper.addFileSetToPath("classpath.parser", "${lib.dir}/parser", "*.jar"); | |||
| helper.addFileSetToPath("classpath.parser", | |||
| "${lib.dir}/parser", "*.jar"); | |||
| helper.createPath("classpath.common"); | |||
| helper.addPathElementToPath("classpath.common", "${distlib.dir}/init.jar"); | |||
| helper.createPath("classpath.antcore"); | |||
| @@ -60,6 +61,8 @@ public class MutantBuilder { | |||
| helper.javac("${java.dir}/start", "${bin.dir}/start", "classpath.start"); | |||
| helper.jar("${bin.dir}/start", "${distlib.dir}/start.jar", | |||
| null, null); | |||
| helper.jar("${bin.dir}/start", "${distlib.dir}/ant.jar", | |||
| null, null); | |||
| } | |||
| protected void ant1compat(BuildHelper helper) { | |||
| } | |||
| @@ -86,9 +89,6 @@ public class MutantBuilder { | |||
| protected void main(BuildHelper helper) { | |||
| } | |||
| protected void checkstyle(BuildHelper helper) { | |||
| helper.setProperty("checkstyle.bin", "../checkstyle"); | |||
| helper.createPath("checkstyle.path"); | |||
| helper.addFileSetToPath("checkstyle.path", "${checkstyle.bin}", null); | |||
| helper.mkdir("${bin.dir}/check"); | |||
| } | |||
| protected void javadocs(BuildHelper helper) { | |||
| @@ -99,5 +99,12 @@ public interface AntContext { | |||
| * @return the location | |||
| */ | |||
| Location getLocation(); | |||
| /** | |||
| * Get the classloader associated with this context | |||
| * | |||
| * @return a classloader instance. | |||
| */ | |||
| ClassLoader getClassLoader(); | |||
| } | |||
| @@ -171,5 +171,23 @@ public interface ComponentService { | |||
| */ | |||
| Object createComponent(String componentName) throws ExecutionException; | |||
| /** | |||
| * Create a component given its class. The component will have a context | |||
| * but will not be configured. It should be configured using the | |||
| * appropriate set methods and then validated before being used. | |||
| * | |||
| * @param componentClass the component's class | |||
| * @param factory the factory to create the component | |||
| * @param loader the classloader associated with the component | |||
| * @param addTaskAdapter whenther the returned component should be a | |||
| * task, potentially being wrapped in an adapter | |||
| * @param componentName the name of the component type | |||
| * @return the created component. The return type of this method depends | |||
| * on the component type. | |||
| * @exception ExecutionException if the component cannot be created | |||
| */ | |||
| Object createComponent(AntLibFactory factory, ClassLoader loader, | |||
| Class componentClass, boolean addTaskAdapter, | |||
| String componentName) throws ExecutionException; | |||
| } | |||