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?

Foi útil?

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).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top