maneira mais fácil de ter um verdadeiro “tarefas de arquivo” em ANT
Pergunta
Eu ainda estou aprendendo a usar ANT bem, e eu queria entender se há alguma maneira razoável para fazer tarefas de arquivo nele, semelhante ao Rake e fazer:
http://martinfowler.com/articles/rake.html#FileTasks
"Com um arquivo que você está se referindo a arquivos reais em vez de nomes de tarefas. 'Build / dev / rake.html' So e 'dev / rake.xml' são arquivos reais. O arquivo HTML é a saída dessa tarefa e o arquivo XML é a entrada você pode pensar em uma tarefa arquivo como dizendo ao sistema de compilação como fazer o arquivo de saída -. na verdade, esta é exatamente a noção de make - que lista os arquivos de saída que você quer e fazer dizer como fazê-los.
Uma parte importante da tarefa de arquivo é que ele não é executado a menos que você precisa executá-lo. Os olhares sistema de compilação para os arquivos e apenas executa a tarefa se o arquivo de saída não existe ou é data de modificação é mais cedo do que o arquivo de entrada. tarefas de arquivo, portanto, funcionam muito bem quando você está pensando de coisas em um arquivo por arquivo. "
Assim, em outras palavras, digamos que eu quiser executar um binário de costume e eu só quero que binário para executar, se qualquer um dos arquivos mudaram. Isto está relacionado com este pergunta, mas eu não quero correr o binário em tudo, não só passar uma parte do conjunto de arquivos (ou seja, não é único no conjunto de arquivos e eu não quero que a ferramenta seja executada em todos).
A solução ideal seria também não ser uma coisa loooong, mas poderia ser facilmente aplicado a qualquer alvo -? Talvez usando algum ANT JavaScript ou tarefa personalizada
Solução
Use ant-contrib tarefa outofdate. Ele tem exatamente as propriedades que você está pedindo. Aqui está website ant-contrib .
Aqui é um modelo de como integrá-lo em sua construção:
<taskdef
resource="net/sf/antcontrib/antlib.xml"
>
<classpath>
<pathelement location="${ant-contrib.jar}"/>
</taskdef>
<outofdate>
<sourcefiles path="dev/rake.xml"/>
<targetfiles path="build/dev/rake.html"/>
<sequential>
... do your work here ...
... will only run if rake.html is older than rake.xml ...
</sequential>
</outofdate>