我正在尝试创建一个Ant构建,它将在文件夹中的每个子文件夹中运行目标。我特别需要这个只能在子文件夹级别运行,因为如果我从顶层文件夹运行它并将其调用以包含子文件夹,它会对结果进行加扰。
我将以下内容与我已经看过的建议放在一起,看起来很接近,但它无法正常工作。关于它的几点意见:
当我运行时,我得到" C:\ Developer \ SVN \ trunk \ DITA \ xxx_conversion \ test \ $ {subdir}不存在。" (一个子目录确实存在,我有... \ test \ testsub \ xxx_xxx.dita)
目标名为"脚本"完美无瑕。如果我将它指向一个文件夹,它会转换其中的内容,并为我提供我需要的结果。
在foreach
任务中,如果我将<dirset dir=".">
更改为测试,则构建成功,但它基本上只按原样运行"script"
目标。
在名为&#34;脚本&#34;的目标中,如果我将"*.dita"
更改为"**\*.dita"
,则在其操作中包含顶级文件夹,因此结果不是我的需要,这只是将每个.dita文件放在每个子文件夹中并将其包装在与dita文件同名的文件夹中:
开始状态:testsub\xxx_xxx.dita
期望的结果:testsub\xxx_xxx\xxx_xxx.dita
加扰结果:testsub\xxx_xxx\testsub\xxx_xxx.dita
如果有人能告诉我这个(可能是很多事情)有什么不对,那就太棒了:
<project name="move_and_wrap_dita_topics" default="script" basedir="C:\Developer\SVN\trunk\DITA\xxx_conversion\test">
<taskdef resource="net/sf/antcontrib/antlib.xml">
</taskdef>
<foreach target="script" param="worksheet" inheritall="true">
<path>
<dirset dir="${subDir}">
<include name="*"/>
</dirset>
</path>
</foreach>
<target name="script">
<copy todir="C:\Developer\SVN\trunk\DITA\xxx_conversion\cleaned" verbose="true">
<fileset dir="C:\Developer\SVN\trunk\DITA\xxx_conversion\test">
<include name="*.dita"/>
</fileset>
<scriptmapper language="javascript">
self.addMappedName(source.replace(source.split('.')[0], source.split('.')[0] + "/" + source.split('.')[0]));
</scriptmapper>
</copy>
</target>
</project>
作为替代方案,如果有某种方法可以在"include name"
任务中编写"script"
,以便它完全跳过顶层文件夹并且只从子文件夹开始重写,那就会更简单。我已经尝试了<include name="/*.dita"/>
和其他各种变化,但没有运气。
答案 0 :(得分:1)
开始状态:
testsub\xxx_xxx.dita
期望的结果:
testsub\xxx_xxx\xxx_xxx.dita
这应该适用于单个正则表达式映射器,您根本不需要foreach
:
<copy todir="C:\Developer\SVN\trunk\DITA\xxx_conversion\cleaned" verbose="true">
<fileset dir="C:\Developer\SVN\trunk\DITA\xxx_conversion\test"
includes="*/*.dita" />
<!-- use handledirsep to treat \ as if it were / in the source file name -->
<regexpmapper handledirsep="true" from="^(.*)/([^/]*)\.dita$"
to="\1/\2/\2.dita" />
</copy>
includes="*/*.dita"
将匹配文件集基本目录下一级的.dita
个文件,正则表达式会将源中的testsub/xxx.dita
转换为testsub/xxx/xxx.dita
目的地。如果您要查找深度为一级或多级的文件,请改用*/**/*.dita
。