2

ANTスクリプトを完成させました(完璧に仕事をします)。しかし、新しい要件があり、スクリプトを変更する必要があります。目標は、ANT 展開ファイルを .xml という名前にすることですdeploy-all.txt。ファイルは次のようになります

client1=name1=server1+server2=repositoryX
client2=name2=server1+server3=repositoryY
client3=name3=server2+server4=repositoryZ

クライアントは 1 つだけ、名前は 1 つだけ、サーバーは 1 つから数個まで、リポジトリは 1 つだけ、タイプは 1 つだけです。

目標は: 行ごとに変数を取得する必要があるため、それらを解析してタスクを実行できます。出力は

client=client1
name=name1
server=server1
server=server2 (could be more)
repository=repository1

これらのパラメーターは、行ごとに解析する必要があります。私はGENERIC.WARと呼ばれる汎用APPを持っています - それは行われ、うまく機能します。現在、アプリケーションには、ビルド/デプロイする必要がある個別のプラグインが必要です。

そのスクリプトが行うこと:

a) copy generic GENERIC.WAR file to server1 and server2 with name scecified as client1 (SCP using scp task)
b) get svn repository based on repositoryX (svn update ant task)
c) get name and loop through existing code (using xmltask from checked out repository) to find right code to compile and zip it (have done it already)

したがって、実行できるすべてのタスクがありますが、各要素を各行の個別のパラメーターとして解析することはできません。私は試しましたが、これまでのところ成功していませんfor listsequential1つのパラメーターのみを除いてすべてを分離できました。各行をループして追加のタスクに解析できる複数のパラメーターとして取得することはできません。

それはほんの始まりに過ぎないので、デザインを変更することができます - たとえば、TXT の代わりに XML を使用します。それは実行可能ですか? はいの場合は、方法を教えてください。

4

1 に答える 1

5

「名前空間化された」方法でプロパティキーを定義することから始めると、必要なものを簡単に達成できると思います。

client.list=client1,client2
client1.name=client1
client1.server.list=server1,server2
client1.repository=repositoryX
client2.name=name2
client2.server.list=server1,server3
client2.repository=repositoryY

これで、ループやマクロ定義で相互参照できる一意のキーを持つプロパティのセットができました。

これを使用する方法の例を次に示します。

<property file="deploy-all.txt"/>

<target name="test">
    <for list="${client.list}" param="client">
        <sequential>
            <deploy client="@{client}"/>
        </sequential>
    </for>
</target>

<macrodef name="deploy">
    <attribute name="client"/>
    <sequential>
        <echo>client: @{client}</echo>
        <for list="${@{client}.server.list}" param="server">
            <sequential>
                <echo>server: @{server}</echo>
            </sequential>
        </for>
        <echo>repository: ${@{client}.repository}</echo>
    </sequential>
</macrodef>

出力:

test:
     [echo] client: client1
     [echo] server: server1
     [echo] server: server2
     [echo] repository: repositoryX
     [echo] client: client2
     [echo] server: server1
     [echo] server: server3
     [echo] repository: repositoryY
于 2015-03-31T12:46:09.250 に答える