2012-07-09 46 views
0

我的工作類似的問題在這裏的東西:ANT script to compile all (css) LESS files in a dir and subdirs with RHINOAnt:使用fileset應用,但只對一個文件執行一次?

不過,我有一個很難定製這一個特別的要求:

  • 如果任何.less文件dir.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文件每次回收?

回答

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>