Ant构建仅在子目录上操作



我正在尝试创建一个Ant构建,它将在文件夹中的每个子文件夹中运行目标。我特别需要这个只在子文件夹级别运行,因为如果我从顶部文件夹运行它并告诉它包含子文件夹,它会扰乱结果。

我把我所看到的建议放在一起,它看起来很接近,但它不起作用。关于它的几点:

  • 当我运行这个时,我得到"C:DeveloperSVNtrunkDITAxxx_conversiontest${subdir}不存在。"(子目录确实存在,我有…testtestsubxxx_xxx.dita)

  • 名为"script"的目标本身可以完美地工作。如果我把它指向一个文件夹,它就会转换其中的内容,并给出我需要的结果。

  • foreach任务中,如果我将<dirset dir=".">更改为测试,则构建成功,但它基本上只是运行"script"目标。

  • 在名为"脚本"的目标中,如果我将"*.dita"更改为"***.dita",则在其操作中包含顶级文件夹,因此结果不是我需要的,这只是在每个子文件夹中获取每个.dita文件,并将其包装在与dita文件同名的文件夹中:

启动状态:testsubxxx_xxx.dita

期望结果:testsubxxx_xxxxxx_xxx.dita

置乱结果:testsubxxx_xxxtestsubxxx_xxx.dita

如果有人能告诉我这个(可能很多)有什么问题,那就太好了:

<project name="move_and_wrap_dita_topics" default="script" basedir="C:DeveloperSVNtrunkDITAxxx_conversiontest">
<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:DeveloperSVNtrunkDITAxxx_conversioncleaned" verbose="true">
     <fileset dir="C:DeveloperSVNtrunkDITAxxx_conversiontest">
        <include name="*.dita"/> 
     </fileset>
        <scriptmapper language="javascript">
   self.addMappedName(source.replace(source.split('.')[0], source.split('.')[0] + "/" + source.split('.')[0]));
      </scriptmapper>
  </copy>
</target>
</project>

作为替代方案,如果有某种方法可以在"script"任务中编写"include name",以便它完全跳过顶部文件夹,只从子文件夹开始重写,那将更简单。我试过<include name="/*.dita"/>和各种各样的其他变化,但没有运气。

启动状态:testsubxxx_xxx.dita

期望结果:testsubxxx_xxxxxx_xxx.dita

这应该可以用一个单一的regex映射器,你不需要foreach:

<copy todir="C:DeveloperSVNtrunkDITAxxx_conversioncleaned" verbose="true">
  <fileset dir="C:DeveloperSVNtrunkDITAxxx_conversiontest"
           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文件,regex将源中的testsub/xxx.dita转换为目标中的testsub/xxx/xxx.dita。如果你想找到一个或多个深度的文件,那么使用*/**/*.dita代替。

相关内容

  • 没有找到相关文章

最新更新