Scripts de construção Ant, antcall, dependências, etc.
-
08-06-2019 - |
Pergunta
Eu tenho um script de construção e, como parte desse script, ele copia um arquivo jar para um diretório; para facilitar, vamos chamá-lo de jar de utilitários.o jar de utilitários é construído por outro script de construção localizado em outro diretório.O que estou tentando fazer é que meu script de construção execute o script de construção de utilitários para que eu possa garantir que o jar de utilitários esteja atualizado.
Então eu sei que preciso importar o arquivo de compilação de utilitários.
<import file="../utils/build/build.xml" />
O que não funciona porque a tarefa de importação, ao contrário de quase todas as outras tarefas ant, não é executada a partir do basedir, mas sim a partir do pwd.Então, para contornar isso, tenho esta pequena cantiga, que importa com sucesso o arquivo de compilação
<property name="baseDirUpOne" location=".." />
<import file="${baseDirUpOne}/utils/build/build.xml" />
Agora que resolvi meu problema de importação, preciso chamar a tarefa, bem, isso deve ser fácil, certo:
<antcall target="utils.package" />
observe que acima, utils é o nome do projeto ../utils/build/build.xml
o problema que estou enfrentando agora é que a chamada ant não é executada em ../utils/build então o que eu preciso, e não consigo encontrar, é uma propriedade runat ou algo semelhante, essencialmente:
<antcall target="utils.package" runat="../utils/build" />
A razão pela qual preciso disso é que em meu arquivo de construção de utilitários a etapa para selecionar qual código copiar para o jar é baseada em caminhos relativos para evitar caminhos de codificação em meu arquivo ant.Alguma ideia?
Solução
Eu tenho algo semelhante configurado:Eu tenho um build.xml Ant principal que chama um build.xml separado que cuida da construção de meus testes.É assim que eu faço:
<target name="build-tests">
<subant target="build">
<fileset dir="${test.home}" includes="build.xml"/>
</subant>
</target>
O truque é usar subant
em vez de antcall
.Você não precisa importar o outro arquivo de construção.
Outras dicas
Tente usar o tarefa "formiga" em vez da tarefa "antcall", que executa a compilação importada diretamente, em vez de importá-la para o arquivo de compilação atual.Possui um parâmetro "dir":
o diretório a usar como baseado no novo projeto ANT.Os padrões para o baseado do projeto atual, a menos que o Heritall tenha sido definido como falso; nesse caso, ele não possui um valor padrão.Isso substituirá a configuração baseada no projeto chamado.
Então você poderia fazer:
<ant antfile="${baseDirUpOne}/utils/build/build.xml" dir="../utils/build" />
ou algo assim.
Você pode passar parâmetros para antcall usando aninhados no bloco antcall.Portanto, você pode transmitir as propriedades dessa maneira (provavelmente até com base, já que as propriedades são imutáveis).