Ant:应用文件集,但只对一个文件执行一次?

时间:2012-07-09 16:41:26

标签: ant less

我正在处理类似问题的问题:ANT script to compile all (css) LESS files in a dir and subdirs with RHINO

但是,我很难将其定制为一个特定的要求:

  • 如果.less中的任何dir.less文件发生更改:只运行一个文件(因为它导入其他较少的文件,只生成一个组合输出)。< / LI>

这是我当前build.xml的状态:

<target name="less" description="Compile LESS files">

    <echo message="Checking for LESS file changes..."/>

    <apply dir="${dir.less}" executable="${tool.less}" parallel="false" failonerror="true">

        <fileset dir="${dir.less}" includes="*.less" />
        <srcfile/>

        <mapper type="glob" from="*.less" to="${dir.css}/*.css"/>
        <targetfile/>

        <arg value="-compress" />
  </apply>

</target>

这当前构建了所有.LESS个文件,并将它们输出到适当的位置(这是宜居的)。如果我将mapper glob替换为:

<mapper type="glob" from="MainFileThatImportsOthers.less" to="${dir.css}/MainFileThatImportsOthers.css"/>

fileset指令有效地简化为该文件,并且更改该目录中的其他.LESS文件不会导致该任务的输出。

有人能指出我正确的方向,所以我可以避免设置错误并每次重复使用每个.LESS文件吗?

2 个答案:

答案 0 :(得分:0)

我制定了一个正常工作的解决方案,我使用upToDate任务设置属性以有条件地触发编译器Exec

<target name="scanLess" description="Scan for LESS file changes">

    <echo message="Checking for LESS file changes..."/>

    <uptodate property="tool.less.changed" targetfile="${dir.css}/MyFile.css" >
        <srcfiles dir="${dir.less}" includes="*.less" />
    </uptodate>

</target>

<target name="less" depends="scanLess" unless="tool.less.changed" description="Compile LESS files" >

    <echo message="LESS files changed, running lessc" />

    <exec executable="${tool.less}" failonerror="true">
        <arg value="${dir.less}/MyFile.less" />
        <arg value="${dir.css}/MyFile.css" />
        <arg value="-compress" />
    </exec>
</target>

答案 1 :(得分:0)

调查selectors在ANT中的工作方式