0

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

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

  • 如果有任何.less文件发生更改:仅在dir.less一个文件上运行 LESS (因为它会导入其他较少的文件,从而生成单个组合输出)。

这是我当前的状态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 type="glob" from="MainFileThatImportsOthers.less" to="${dir.css}/MainFileThatImportsOthers.css"/>

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

有人可以指出我正确的方向,这样我就可以避免设置错误并每次都回避每个.LESS文件?

4

2 回答 2

0

研究选择器如何在 ANT 中工作

于 2012-07-09T21:42:39.487 回答
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>
于 2012-07-09T21:01:28.503 回答