ant-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Peter Reilly <peter.rei...@corvil.com>
Subject Re: Redefinition of fileset
Date Wed, 28 Apr 2004 13:16:53 GMT
The <fileset> nested element in <concat> and most (as in all current) tasks

is not a typedef, but the class "org.apache.tools.ant.types.FileSet"
(The java code is void addFileSet(FileSet x)), so just redefining
the fileset type will have no impact on the nested elements.

There is two solutions, both involve using a typedef:
use a typedef to define a new fileset type
<typedef name="ribomatic.fileset" classname="....">
  <classpath ,,>
</typedef>

1) use an id for the fileset and use that
2) use the undocumented ant-type attribute to set
   the class to use for the nested element

Example:

    <scripttypedef name="myfileset" language="beanshell">
    import org.apache.tools.ant.types.FileSet;
    public class MyFileSet extends FileSet {
    }
    </scripttypedef>
    <myfileset id="x" dir="." includes="*.xml"/>
    <concat>
      <fileset refid="x"/>
    </concat>

    <concat>
      <fileset ant-type="myfileset" dir="." includes="*.xml"/>
    </concat>

Peter

Jens Riboe wrote:

> Hi,
>
> I'm investigating how to use <typedef>, by redefining <fileset> and 
> use in
> in a context expecting an ordinary ditto. However, it doesn't work as 
> expected.
>
> Ant reports a redefinition
>    Trying to override old definition of datatype fileset
> But I cannot see any traceout of the new fileset implementation.
>
> I'm using
>    xyz> ant -version
>    Apache Ant version 1.6.1 compiled on February 12 2004
>
> Am I missing something or cannot I redefine fileset like the example 
> below?
>
> Many thanks in advance, for any light on this problem.
> Cheers,
>    Jens
>
> ---build.xml------------------------------------------------------
> <target name="tst.fileset" depends="compile" >
>        <typedef name="fileset" 
> classname="com.ribomation.anttasks.dependencylist.MyFileSet">
>            <classpath> <pathelement location="${class.dir}"/> 
> </classpath>
>        </typedef>
>
>        <delete dir="${tmp.dir}" quiet="true" />
>        <mkdir  dir="${tmp.dir}" />
>        <mkdir  dir="${tmp.dir}/input" />
>        <antcall target="mktmp">
>            <param name="tmp.dir" value="${tmp.dir}/input"/>
>        </antcall>
>        <antcall target="mktmp">
>            <param name="tmp.dir" value="${tmp.dir}/input"/>
>        </antcall>
>
>        <concat destfile="${tmp.dir}/RESULT.txt" append="true">
>            <fileset dir="${tmp.dir}/input"/>
>        </concat>
>        <loadfile property="txt" srcFile="${tmp.dir}/RESULT.txt"/>
>        <echo message="Content: [${txt}]"/>
>    </target>
>
>    <target name="mktmp">
>        <tempfile property="tmpfile" destdir="${tmp.dir}" prefix="t"  
> suffix=".txt"/>
>        <echo message="Hello " file="${tmpfile}" />
>    </target>
> ---------------------------------------------------------------
>
> ---OUTPUT------------------------------------------------------
> xyz> ant tst.fileset
> Buildfile: build.xml
> init.props:
> init.dirs:
> init:
> compile:
>    [javac] Compiling 4 source files to 
> C:\hack-cvs\DEPEND~1\target\classes
> tst.fileset:
> Trying to override old definition of datatype fileset
>   [delete] Deleting directory C:\hack-cvs\DEPEND~1\target\tmp
>    [mkdir] Created dir: C:\hack-cvs\DEPEND~1\target\tmp
>    [mkdir] Created dir: C:\hack-cvs\DEPEND~1\target\tmp\input
> mktmp:
> mktmp:
>     [echo] Content: [Hello Hello ]
> BUILD SUCCESSFUL
> Total time: 2 seconds
> ---------------------------------------------------------------
>
> ---MyFileSet------------------------------------------------------
> public class MyFileSet extends FileSet {
>    public DependencyFileSet() {
>        this.getProject().log("[MyFileSet] init", Project.MSG_WARN);
>    }
>    public DirectoryScanner getDirectoryScanner(Project p) {
>        this.getProject().log("[MyFileSet] getDirectoryScanner()", 
> Project.MSG_WARN);
>        return super.getDirectoryScanner(p);
>    }
>    public void setDir(File dir) throws BuildException {
>        this.getProject().log("[MyFileSet] setDir("+dir+")", 
> Project.MSG_WARN);
>    }
> }
> ---------------------------------------------------------------
>
> Ant's own <concat> contains the following snippet
>    for (Enumeration e = sources.elements(); e.hasMoreElements();) {
>            Object o = e.nextElement();
>            if (...} else if (o instanceof FileSet) {
>                FileSet    fileSet = (FileSet) o;
>                DirectoryScanner scanner =  
> fileSet.getDirectoryScanner(getProject());
>                checkAddFiles(fileSet.getDir(getProject()), 
> scanner.getIncludedFiles());
>            } else ...}
>        }
>
> I inserted a print statement into MyFileSet.getDirectoryScanner()
> and expected to see
>        [MyFileSet] getDirectoryScanner()"
> in the OUTPUT.
>
> The concat task contains this method for adding a FileSet.
>    public void addFileset(FileSet set) {
>        sources.addElement(set);
>    }
> I thought my own fileset would be substituted instead.
>
>
>
>------------------------------------------------------------------------
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: user-unsubscribe@ant.apache.org
>For additional commands, e-mail: user-help@ant.apache.org
>


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@ant.apache.org
For additional commands, e-mail: user-help@ant.apache.org


Mime
View raw message