如何使用ant build文件获取当前文件名?

时间:2014-07-10 15:18:32

标签: apache ant

我最近创建了一个ANT构建文件,使用xslt将.xml文件转换为.fo。 ANT构建按设计执行。但是,输入文件被硬编码到XSLT任务中。

如何动态更改输入文件名,而不必每次都编辑构建文件?以下是我的代码片段。

<target name="createFO"
    description="Transform using XSLT 1.0" depends="clean, copyimg, copysrc">
      <xslt basedir="${srcdir}" 
            destdir="${dstDir}"
            extension=".fo"
            style="${ss}/foobar.xsl"
            in="sample.xml"
            out="${dstDir}/new.fo"/>   

      <echo>The fo file has been created!</echo>
</target>

我没有提到我正在使用OxygenXML来处理我的ANT文件。遗憾。

1 个答案:

答案 0 :(得分:3)

您不需要inout属性。相反,您可以使用包含要转换的文件的<fileset>

<xslt>将从输入文件中删除后缀,并应用extension属性中使用的后缀。

<target name="createFO"
    description="Transform using XSLT 1.0" depends="clean, copyimg, copysrc">
    <!-- Don't put "basedir" parameter. It comes from fileset! -->
      <xslt destdir="${dstDir}"
            extension=".fo"
            style="${ss}/foobar.xsl">
            <fileset dir="${xslt.dir}"/>
      </xslt>
      <echo>The fo file has been created!</echo>
</target>

您也可以使用mappers将输入文件的名称转换为输出文件名。

另一个当然是使用属性作为输入文件名,然后让某人将文件名传递给Ant脚本:

<target name="createFO"
    description="Transform using XSLT 1.0" depends="clean, copyimg, copysrc">
      <fail message="You must pass in the parameter &auot;-Dxml.file=...&quot;">
           <condition>
               <not>
                   <available file="${xml.file}">
           </condition>
      </fail>

      <xslt basedir="${srcdir}" 
            destdir="${dstDir}"
            extension=".fo"
            style="${ss}/foobar.xsl"
            in="${xml.file}"
            out="${dstDir}/new.fo"/>   

      <echo>The fo file has been created!</echo>
</target>

现在,要执行此操作,您需要:

$ ant -Dxml.file=sample.xml createFO