Eu quero executar um comando de um buildfile Ant, para cada arquivo em um diretório.
Estou procurando uma solução independente de plataforma.
Como eu faço isso?
Claro, eu poderia escrever um script em alguma linguagem de script, mas isso adicionaria mais dependências ao projeto.
file-io
ant
build-process
build-automation
ivan_ivanovich_ivanoff
fonte
fonte
Use a tarefa <apply> .
Ele executa um comando uma vez para cada arquivo. Especifique os arquivos por meio de conjuntos de arquivos ou qualquer outro recurso. <apply> está embutido; nenhuma dependência adicional necessária; nenhuma implementação de tarefa personalizada necessária.
Também é possível executar o comando apenas uma vez, anexando todos os arquivos como argumentos de uma vez. Use o atributo parallel para mudar o comportamento.
Desculpe pelo atraso de um ano.
fonte
Uma abordagem sem ant-contrib é sugerida por Tassilo Horn (o alvo original está aqui )
Basicamente, como não há extensão de <java> (ainda?) Da mesma forma que <apply> estende <exec> , ele sugere o uso de <apply> (que pode, é claro, também executar um programa java em uma linha de comando)
Aqui estão alguns exemplos:
fonte
Esta é uma maneira de fazer isso usando javascript e a tarefa ant scriptdef, você não precisa do ant-contrib para que esse código funcione, pois o scriptdef é uma tarefa ant central.
fonte
project
é referenciada no exemplo acima, mas sem nenhuma definição prévia disponível. Seria bom ter isso representado ou esclarecido. EDIT: n / m, descobri queproject
é uma var predefinida para acessar o projeto atual. Eu suspeitava disso, mas não tinha certeza.ant-contrib é mau; escrever uma tarefa de formiga personalizada.
ant-contrib é mau porque tenta converter formiga de um estilo declarativo para um estilo imperativo. Mas o xml é uma linguagem de programação de merda.
Por outro lado, uma tarefa de formiga personalizada permite que você escreva em uma linguagem real (Java), com um IDE real, onde você pode escrever testes de unidade para se certificar de que tem o comportamento desejado e, em seguida, fazer uma declaração limpa em seu script de construção sobre o comportamento que você deseja.
Este discurso só importa se você se preocupa em escrever scripts de formigas sustentáveis. Se você não se preocupa com a sustentabilidade por todos os meios, faça o que funcionar. :)
Jtf
fonte
Eu sei que este post é muito antigo, mas agora que algum tempo e as versões do Ant se passaram, existe uma maneira de fazer isso com os recursos básicos do Ant e achei que deveria compartilhá-lo.
Isso é feito por meio de um macrodef recursivo que chama tarefas aninhadas (até mesmo outras macros podem ser chamadas). A única convenção é usar um nome de variável fixo (elemento aqui).
Os principais recursos necessários são:
Não consegui fazer a variável delimitadora, mas isso pode não ser uma grande desvantagem.
fonte
Você pode usar a tarefa ant-contrib "for" para iterar na lista de arquivos separados por qualquer delimitador, o delimitador padrão é ",".
A seguir está o arquivo de amostra que mostra isso:
fonte
Faça o que o blak3r sugeriu e defina seu classpath de destino assim
onde lib é onde você guarda o seu jar
fonte