Erik Hatcher wrote:

So this would allow creating a filter, mapper, or other type dynamically?

Yes (well mapper's when the mapper type patch is applied).

Nice! Just a sanity check - there is no way to do this with scripting stuff in 1.6.1 is there?

I was about to say that one could not but this is not true:

   <script language="beanshell">
     import org.apache.tools.ant.Task;
     import org.apache.tools.ant.BuildException;
     import java.io.File;
     public class DeleteOnExit extends Task {
        private File file;
        public void setFile(File file) {
            this.file = file;
        }
        public void execute() {
            if (file == null) {
               throw new BuildException("Missing attribute file");
            }
            file.deleteOnExit();
        }
     }
     project.addDataTypeDefinition("deleteonexit", DeleteOnExit.class);
   </script>
   <deleteonexit file="tobedeleted"/>

works fine!

<scripttypedef> does however handle namespace,  antlib and <antcall> use.



package org.apache.tools.ant.taskdefs.optional;

/**
 * Class to define an ant definition using a script that
 * can return a class that is a normal ant task/datatype.
 * If the language is beanshell it must be 2.0 or higher.
 * The other scripting currently known to work is
 * groovy (1.0beta3).
 * <p>
 * Note that if there is anything incorrect with the script
 * the warning message is quite cryptic.
 * </p>
 * This class is based in part on o.a.t.ant.util.ScriptRunner.
 * The main difference is that it does not define
 * beans. This is for three reasons:
 * <ol>
 * <li>The definition may be used in another project.</li>
 * <li>It should be possible to convert to java later.</li>


And the third reason is? :)

removed..... (I had problems with groovy and assumed it was due to the references being defined).

Peter
Also the orignal posted code had a error:

           ClassLoader cl = createLoader();
           Thread.currentThread().setContextClassLoader(cl);
           manager.setClassLoader(cl);
should be:
           ClassLoader classloader = createLoader();
           Thread.currentThread().setContextClassLoader(classloader);
           manager.setClassLoader(classloader);

Peter



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to