我有一个构建脚本,可以执行许多操作(最小化javascript,上传到amazon s3等)。最小化ANT任务仅对我已修改的javascript进行操作,并忽略其余的(我没有编写此脚本)。我想为amazon s3任务做类似的事情,其中只在任务中上传更新的内容。任何关于如何做到这一点的线索将不胜感激。
答案 0 :(得分:8)
您可以选择带有修改日期标记的文件集。修改后的标签非常强大,请查看:Ant Selectors - Modified。
为了告诉它有什么变化,它可以将缓存保存在属性文件中,该属性文件在每次成功构建后都会更新,除非你使用delayupdate属性 - 所以也许要测试它,你可以:
<param name="commitUpdate" value="false" />
[...]
<ftp ...>
<fileset dir="src">
<modified delayupdate="${commitUpdate}" />
</fileset>
</ftp>
当然,您可以通过命令行参数或其他方式设置commitUpdate。
答案 1 :(得分:1)
您可能需要考虑Ant-contrib库提供的OutOfDate Ant任务。它允许您为文件集中的每个源文件设置顺序/并行任务。您可以应用文件映射器来定义目标文件以测试源文件,这样只有已修改的文件才能运行特定的顺序/并行任务。
查看此SO主题:
How to execute an Ant task only when source files have been modified?
答案 2 :(得分:0)
通常,您可以使用File Mappers对包含源文件和目标文件的任务执行此操作,以便该任务仅应用于已更改的源文件。我不知道是否有办法在Ant无法看到目标文件的情况下进行操作,例如上传。
答案 3 :(得分:0)
如果您不想更改/重写S3任务并希望保持纯粹的XML,您可以使用Uptodate Task和影子目录来模仿此行为 - 例如保留上传的副本(可能很大)或只是一个空文件,其中包含您上次上传的创建日期。手册页上的示例应该提供很多提示。
当然,您也可以编写自己的S2Uptodate任务,连接到S3以比较日期。首选的解决方案取决于有多少文件(例如,一些巨大的文件,你可以在一个不同的操作中检查每个文件,或者你可以用不同的方式检查几乎无数的小文件。
您可能也会受到Xjc task使用和元素的启发,尽管这当然只能在本地文件上运行。