20

アプリケーションをビルドするためのApacheANTスクリプトがあり、結果のJARファイルをバージョン管理(この場合はVSS)にチェックインします。ただし、このプロジェクト用に2つのJARファイルをビルドしてから、両方をVSSにチェックインする必要がある変更があります。

元のJARファイルをVSSにチェックインする現在のターゲットは、いくつかのプロパティを介してJARファイルの名前を検出します。このターゲットを「一般化」して、任意の名前のJARファイルをチェックインするために再利用できるようにする簡単な方法はありますか?通常の言語では、これは明らかに関数パラメーターを必要としますが、私の知る限り、ANTには同等の概念は実際にはありません。

4

5 に答える 5

47

マクロで見つけた主な利点は、マクロに渡されるプロパティを完全に制御できることです (特に新しいプロパティを追加する場合)。

Ant スクリプトをターゲットからリファクタリングするだけです。

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

マクロの作成 (コピー/貼り付けと @{file} での置換に注意してください):

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

ファイルでマクロを呼び出します。

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

リファクタリング、「Ant 方式」

于 2008-09-15T19:26:30.460 に答える
21

バイナリをバージョン管理することは一般的に悪い考えであり、そうすることはお勧めしません。ただし、どうしても必要な場合は、antcallをparamと組み合わせて使用​​して、パラメーターを渡し、ターゲットを呼び出すことができます。

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

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

antcallタスクの詳細については、こちらをご覧ください。

于 2008-09-08T15:18:18.710 に答える
5

Antマクロを見てください。Ant ビルド用の再利用可能な「ルーチン」を定義できます。ここで例を見つけることができます(項目 15)。

于 2008-09-08T15:51:38.273 に答える
3

また、複数のビルド ファイルで同じターゲットを呼び出すことができる subant タスクも確認してください。

<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>
于 2008-09-08T15:23:30.040 に答える
1

Gantを使用して、 groovyでビルドをスクリプト化し、必要なことを実行したり、 groovy ant タスクを確認したりできます。

于 2008-09-18T07:31:14.897 に答える