使用Ant更改文件的上次修改日期

时间:2012-01-31 17:12:49

标签: ant

我目前正在使用YUI通过Ant压缩JavaScript文件:

<apply executable="java" parallel="false">
    <fileset dir="." includes="${build.web.dir}/js/*.js"/>
    <arg line="-jar"/>
    <arg path="yuicompressor-2.4.7.jar"/>           
    <srcfile/>
    <arg line="-o"/>
    <mapper type="glob" from="*.js" to="*-min.js"/>
    <targetfile/>      
</apply>

但是,新创建的* -min.js文件现在具有较新的“上次修改”日期。当我使用RSYNC滚动文件时,这会成为一个问题,RSYNC会比较上次修改日期以确定是否应该更新文件。

理想情况下,我希望保留上次修改日期,以便推出不会不必要地更新所有文件,并且还会覆盖服务器上的新文件(之前已经发生过)。

2 个答案:

答案 0 :(得分:1)

建议你研究一下Ant选择器,很可能是depend selector。如果您看到我的意思,他们会让您将压缩限制为只有那些未压缩的javascript比以前的压缩版本更新的文件。

例如:

<apply executable="java" parallel="false">
    <fileset dir="." includes="${build.web.dir}/js/*.js"
                     excludes="${build.web.dir}/js/*-min.js">
        <depend targetdir=".">
            <globmapper from="*.js" to="*-min.js"/>
        </depend>
    </fileset>
    <arg line="-jar"/>
    <arg path="yuicompressor-2.4.7.jar"/>           
    <srcfile/>
    <arg line="-o"/>
    <mapper type="glob" from="*.js" to="*-min.js"/>
    <targetfile/>      
</apply>

答案 1 :(得分:1)

感谢@ martin-clayton我能够使用Touch任务将新创建的缩小文件恢复到原始的上次修改日期。

以下是参数化的ant调用,允许轻松缩小CSS和JS文件:

<target name="minify-filetype" >
    <echo>Minimise all ${filetype} files</echo>
    <apply executable="java" parallel="false">
        <fileset dir="." includes="${build.web.dir}/${filetype}/*.${filetype}"/>
        <arg line="-jar"/>
        <arg path="../../../etc/ant/trunk/lib/yuicompressor-2.4.7.jar"/>            
        <srcfile/>
        <arg line="-o"/>
        <mapper type="glob" from="*.${filetype}" to="*-min.${filetype}"/>
        <targetfile/>      
    </apply>

    <echo>Convert minified files back to original Last Modified dates</echo>
    <touch>
        <fileset dir="." includes="${build.web.dir}/${filetype}/*.${filetype}"
                         excludes="${build.web.dir}/${filetype}/*-min.${filetype}"/>
        <mapper type="glob" from="*.${filetype}" to="*-min.${filetype}"/>
    </touch>

    <!-- moving *-min.js and creating *.js files (overwriting orginal and deleting *-min) -->
    <move todir="${build.web.dir}/${filetype}/" overwrite="true" preservelastmodified="true">
        <fileset dir="${build.web.dir}/${filetype}/" />
        <mapper type="glob" from="*-min.${filetype}" to="*.${filetype}"/>
    </move>
</target>