You cannot (currently) do that like that.
However you can use ant types to do the same thing.
-------------------------------------------
src/mymapper/MyMapper.java
-------------------------------------------
package mymapper;
import org.apache.tools.ant.util.FileNameMapper;
public class MyMapper implements FileNameMapper {
public void setFrom(String from) {}
public void setTo(String to) {}
public String[] mapFileName(String sourceFileName) {
return new String[] {
sourceFileName.toUpperCase()};
}
}
------------------------------------
src/mymapper/antlib.xml
-----------------------------------
<antlib xmlns:current="ant:current">
<typedef name="mymapper"
classname="mymapper.MyMapper"/>
<macrodef name="copyMapUpper">
<attribute name="todir"/>
<attribute name="fromdir"/>
<sequential>
<copy todir="@{todir}">
<fileset dir="@{fromdir}"/>
<mapper>
<current:mymapper/>
</mapper>
</copy>
</sequential>
</macrodef>
</antlib>
(Note the use of current: to resolve the namespace that the mymapper
type is placed in - see:
http://ant.apache.org/manual/CoreTypes/antlib.html#currentnamespace)
--------------------------
build.xml:
-------------------------
<project default="t" xmlns:my="antlib:mymapper">
<target name="t">
<mkdir dir="classes"/>
<javac srcdir="src" destdir="classes"
debug="yes"/>
<copy todir="classes">
<fileset dir="src"/>
</copy>
<typedef uri="antlib:mymapper" classpath="classes"/>
<mkdir dir="upper"/>
<my:copyMapUpper todir="upper" fromdir="src"/>
</target>
</project>
(For ant.1.6.5, you need to add resource="mymapper/antlib.xml"
to the <typedef uri=../>)
<typedef uri="antlib:mymapper"
resource="mymapper/antlib.xml"
classpath="classes"/>
Peter
On 1/10/07, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
I have an AntLib for which I wrote a FileNameMapper.
I cant use that mapper from inside the antlib.xml:
antlib.xml
---8-<-------8-<-------8-<-------8-<-------8-<-------8-<-------8-<------
-8-<----
<antlib>
<macrodef name="mask">
<attribute name="dir"/>
<sequential>
<move todir="@{dir}">
<fileset dir="@{dir}"/>
<!--
public String[] mapFileName(String filename) {
return new
String[]{filename.replaceAll(from, to)};
}
-->
<mapper
classname="org.apache.tools.ant.taskdefs.optional.ccm.ReplaceAllMapper"
from="-"
to="__"
/>
</move>
</sequential>
</macrodef>
</antlib>
---8-<-------8-<-------8-<-------8-<-------8-<-------8-<-------8-<------
-8-<----
build.xml
---8-<-------8-<-------8-<-------8-<-------8-<-------8-<-------8-<------
-8-<----
<project xmlns:ccm="antlib:org.apache.tools.ant.taskdefs.optional.ccm"
default="menu">
<taskdef uri="antlib:org.apache.tools.ant.taskdefs.optional.ccm"
resource="org/apache/tools/ant/taskdefs/optional/ccm/antlib.xml"
classpath="../../build/antlib_ccm.jar"/>
<target name="mapper.prepare">
<mkdir dir="testdir/dir-1/dir-2/dir-3"/>
<echo
file="testdir/dir-1/dir-2/dir-3/one-two-three-four-five.txt" message="a
file"/>
</target>
<target name="mapper.mask">
<ccm:mask dir="testdir"/>
</target>
</project>
---8-<-------8-<-------8-<-------8-<-------8-<-------8-<-------8-<------
-8-<----
When running normally I get "ClassNotFoundException"
The following error occurred while executing this line:
jar:file:/C:/ant/rzf/CCM_AntLib/build/antlib_ccm.jar!/org/apache/tools/a
nt/taskdefs/optional/ccm/antlib.xml:180:
java.lang.ClassNotFoundException:
org.apache.tools.ant.taskdefs.optional.ccm.ReplaceAllMapper
When invoking with -lib that works. But I dont want our developers
always to type "-lib ......" or to disrupt the "clean" Ant installation.
Any ideas with that classloader issue? (best on Java1.4+Ant 1.6.5)
Jan
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]