diff --git a/proposal/embed/src/java/org/apache/tools/ant/taskdefs/Import.java b/proposal/embed/src/java/org/apache/tools/ant/taskdefs/Import.java
new file mode 100644
index 000000000..e4d4d9050
--- /dev/null
+++ b/proposal/embed/src/java/org/apache/tools/ant/taskdefs/Import.java
@@ -0,0 +1,182 @@
+/*
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2000-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
+ * "default"
,
+ * "name"
, "id"
and "basedir"
.
+ *
+ * @param tag Name of the element which caused this handler
+ * to be created. Should not be null
.
+ * Ignored in this implementation.
+ * @param attrs Attributes of the element which caused this
+ * handler to be created. Must not be null
.
+ *
+ * @exception SAXParseException if an unexpected attribute is
+ * encountered or if the "default"
attribute
+ * is missing.
+ */
+ public void execute() throws BuildException
+ {
+ if (file == null) {
+ throw new BuildException("import element appears without a file attribute");
+ }
+
+ ProjectHelperImpl2.AntXmlContext context;
+ context=(ProjectHelperImpl2.AntXmlContext)project.getReference("ant.parsing.context");
+
+ context.importlevel++;
+
+ project.log("importlevel: "+(context.importlevel-1)+" -> "+(context.importlevel),
+ Project.MSG_DEBUG);
+ project.log("Importing file "+file+" from "+
+ context.buildFile.getAbsolutePath(),
+ Project.MSG_VERBOSE);
+
+ // Paths are relative to the build file they're imported from,
+ // *not* the current directory (same as entity includes).
+ File importedFile = new File(file);
+ if (!importedFile.isAbsolute()) {
+ importedFile = new File(context.buildFileParent, file);
+ }
+ if (!importedFile.exists()) {
+ throw new BuildException("Cannot find "+file+" imported from "+
+ context.buildFile.getAbsolutePath());
+ }
+
+ // Add parent build file to the map to avoid cycles...
+ String parentFilename = getPath(context.buildFile);
+ if (!context.importedFiles.containsKey(parentFilename)) {
+ context.importedFiles.put(parentFilename, context.buildFile);
+ }
+
+ // Make sure we import the file only once
+ String importedFilename = getPath(importedFile);
+ if (context.importedFiles.containsKey(importedFilename)) {
+ project.log("\nSkipped already imported file:\n "+importedFilename+"\n",
+ Project.MSG_WARN);
+ context.importlevel--;
+ project.log("importlevel: "+context.importlevel+" <- "+
+ (context.importlevel+1) ,Project.MSG_DEBUG);
+ return;
+ } else {
+ context.importedFiles.put(importedFilename, importedFile);
+ }
+
+ context.ignoreProjectTag=true;
+ context.helper.parse(project, importedFile, new ProjectHelperImpl2.RootHandler(context));
+
+ context.importlevel--;
+ project.log("importlevel: "+context.importlevel+" <- "+
+ (context.importlevel+1) ,Project.MSG_DEBUG);
+ }
+
+ private static String getPath(File file) {
+ try {
+ return file.getCanonicalPath();
+ }
+ catch (IOException e) {
+ return file.getAbsolutePath();
+ }
+ }
+}
diff --git a/proposal/embed/src/java/org/apache/tools/ant/taskdefs/SystemPath.java b/proposal/embed/src/java/org/apache/tools/ant/taskdefs/SystemPath.java
new file mode 100644
index 000000000..21a76cbbc
--- /dev/null
+++ b/proposal/embed/src/java/org/apache/tools/ant/taskdefs/SystemPath.java
@@ -0,0 +1,219 @@
+/*
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2000-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
+ *
+ * <path id="ant.deps" > + * <fileset ... /> + * </path> + * + * <systemPath pathRef="ant.deps" /> + * + * <junit ... /> + *+ * + * This requires that ant-sax2.jar is included in ant/lib. + * + * It has a single property, a reference to a <path> containing all + * the jars that you need. It'll automatically reload optional.jar + * tasks in a different (non-delegating) loader. + * + * @author Costin Manolache + */ +public class SystemPath extends Task { + public static final String SYSTEM_LOADER_REF="ant.system.loader"; + + public SystemPath() { + } + + /** Specify which path will be used. + */ + public void setPathRef( Reference pathRef ) throws BuildException { + Path path=(Path)pathRef.getReferencedObject(project); + + initSystemLoader(path); + + } + + /** Will prepare the class loader to allow dynamic modifications + * of the classpath. Optional tasks are loaded in a different loader. + */ + private void initSystemLoader(Path path) { + try { + if( project.getReference( SYSTEM_LOADER_REF ) != null ) + return; // already done that. + + // reverse loader + AntClassLoader acl=new AntClassLoader( this.getClass().getClassLoader(), true ); + acl.addLoaderPackageRoot( "org.apache.tools.ant.taskdefs.optional"); + project.addReference( SYSTEM_LOADER_REF, acl ); + + + String list[]=path.list(); + for( int i=0; i