2009-01-31 72 views
15

我有一个构建脚本可以执行许多操作(最小化JavaScript,上传到amazon s3等)。最小化ANT任务只对我修改的javascript进行操作,并忽略其余部分(我没有写这个脚本)。我想为amazon s3任务做类似的事情,只有更新的内容在任务中上传。如何做到这一点的任何线索将不胜感激。如何仅对已修改的文件执行ANT任务

回答

0

一般而言,您可以对使用File Mappers的源文件和目标文件的任务执行此操作,以便该任务仅应用于已更改的源文件。我不知道是否有办法做到Ant无法看到目标文件,如上传。

+0

如果我在构建脚本中使用的URL资产将这项工作? – Akeem 2009-01-31 18:02:21

+0

可能不是 - 我怀疑Ant会看到一个远程目的地,但我没有尝试过。 – 2009-01-31 19:31:37

0

如果您不想更改/重写S3任务并希望纯粹保留在XML中,则可以使用Uptodate Task和阴影目录来模拟此行为 - 例如,保留您的上传副本(可能很大)或者只是一个空白文件,上次上传时间为创建日期。手册页上的示例应该提供许多提示。

当然你也可以编写自己的S2Uptodate任务,连接到S3来比较日期。首选的解决方案取决于有多少文件(例如,几个巨大的文件,你可以在不同的操作中检查每一个文件或接近无限数量的小文件,你会采取不同的处理方式)

你也可能受到Xjc task的使用和元素的启发,虽然这当然是纯粹在本地文件上运行的

8

您可以选择带有修改日期标记的文件集,修改后的标记非常强大,请检查一下:Ant Selectors - Modified

为了让它知道发生了什么变化,它可以在一个属性文件中保留一个缓存,每次成功构建后都会更新,除非你使用delayupdate属性 - 所以也许来测试它,你可以有:

<param name="commitUpdate" value="false" /> 
[...] 
<ftp ...> 
    <fileset dir="src"> 
     <modified delayupdate="${commitUpdate}" /> 
    </fileset> 
</ftp> 

当然,你可以通过命令行PARAM什么设置commitUpdate。

相关问题