Pergunta

Temos um Apache ANT o script para criar a nossa aplicação e, em seguida, verifique a resultante arquivo JAR no controle de versão (VSS neste caso).No entanto, agora, temos uma mudança que requer de nós a construção de 2 arquivos JAR para este projeto, em seguida, verificar tanto em VSS.

O alvo atual que verifica o original arquivo JAR em VSS descobre o nome do arquivo JAR através de alguma propriedade.Existe uma maneira fácil de "generalizar" este destino para que eu possa reutilizá-lo para check-in de um arquivo JAR com qualquer nome?Em uma linguagem normal isso seria, obviamente, chamar para um parâmetro de função, mas, para meu conhecimento, não há realmente um conceito equivalente em FORMIGA.

Foi útil?

Solução

Gostaria de sugerir para trabalhar com macros mais de subant/antcall porque a principal vantagem que eu encontrei com macros é que você está no controle completo sobre as propriedades que são passados para a macro (especialmente se você quiser adicionar novas propriedades).

Você simplesmente refatorar seu script Ant começando com o seu destino:

<target name="vss.check">
    <vssadd localpath="D:\build\build.00012.zip" 
        comment="Added by automatic build"/>
</target>

criar uma macro (repare que o copiar/colar e substituição com @{arquivo}):

<macrodef name="private-vssadd">
    <attribute name="file"/>
    <sequential>
        <vssadd localpath="@{file}" 
            comment="Added by automatic build"/>
    </sequential>
</macrodef>

e chamar as macros com seus arquivos:

<target name="vss.check">
    <private-vssadd file="D:\build\File1.zip"/>
    <private-vssadd file="D:\build\File2.zip"/>
</target>

Refatoração, "a Formiga"de qualquer forma"

Outras dicas

Ele é geralmente considerado uma má ideia para controle de versão de seus binários e eu não recomendo fazer isso.Mas se você absolutamente tem, você pode usar antcall combinado com o param para passar parâmetros e chamar um alvo.

<antcall target="reusable">
    <param name="some.variable" value="var1"/>
</antcall>

<target name="reusable">
    <!-- Do something with ${some.variable} -->
</target>

Você pode encontrar mais informações sobre o antcall tarefa aqui.

Dê uma olhada em Formiga macros.Eles permitem que você defina reutilizáveis "rotinas" para Formiga constrói.Você pode encontrar um exemplo aqui (item 15).

Confira também a subant de tarefas, que permite que você ligue para o mesmo destino em vários arquivos de compilação:

<project name="subant" default="subant1">
    <property name="build.dir" value="subant.build"/>
    <target name="subant1">
        <subant target="">
            <property name="build.dir" value="subant1.build"/>
            <property name="not.overloaded" value="not.overloaded"/>
            <fileset dir="." includes="*/build.xml"/>
        </subant>
    </target>
</project>

Você pode usar Gant o script de compilação com groovy para fazer o que quiser ou ter um olhar para o groovy formiga tarefa.

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