我的问题是继续这个帖子: Ant: copy the same fileset to multiple places
我是mappers的新手。有人(carej?)可以分享使用映射器执行此操作的示例吗?这是我想要的:
parent_folder |----child1_folder | |----files | |----config.file | |----data.txt |----child2_folder |----child3_folder . . . |----childn_folder
我没有选择使用ant-contrib(抱歉......蚂蚁位置或任何taskdesf不在我的控制之下)。所以我不知道如何循环不确定数量的文件夹。
对我的限制:
files
文件夹(通过其他任务,如果不是副本)。以下是我正在尝试的内容(目前正在尝试单个文件,一旦开始工作,将使用其他地图集扩展):
<copy todir="/tmp/parent_folder" verbose="true">
<fileset dir="/tmp/parent_folder">
<include name="*/files/config.file"/>
</fileset>
<mapper type="glob" from="*/files/config.file" to="*/files/config.file"/>
</copy>
它一直说skipped - don't know how to handle it
后跟No sources found.
。
提前致谢, Parag Doke
另一个(可能是?)相关问题: Using mapper & fileset to copy files into a different subdirectory?
答案 0 :(得分:3)
这是一种方式的例子。关键特性是在复制任务中使用enablemultiplemappings
,并使用scriptmapper
来处理迭代目标目录。映射器链用于使提供给scriptmapper的源只是要相对于目标目录复制的文件的路径。
<property name="src.dir" value="child1_folder" />
<dirset dir="parent_folder" id="target.dirs">
<include name="*" />
<exclude name="${src.dir}" />
</dirset>
<copy todir="parent_folder" enablemultiplemappings="yes">
<fileset dir="parent_folder">
<include name="${src.dir}/**"/>
</fileset>
<chainedmapper>
<globmapper from="${src.dir}/*" to="*" />
<scriptmapper language="javascript">
<![CDATA[
// Obtain a reference to the dirset
var dirSet = project.getReference( "target.dirs" );
// Now get matching dirs.
var ds = dirSet.getDirectoryScanner( project );
var includes = ds.getIncludedDirectories( );
for ( var i = 0; i < includes.length; i++ )
{
self.addMappedName( includes[i] + "/" + source );
}
]]>
</scriptmapper>
</chainedmapper>
</copy>
复制任务中的多个映射自1.6版本以来一直在Ant中。