0

好奇心だけで...そしてもちろん、私はそのように実装したいからです;)

スクリプトにはいくつかの主要なターゲットがあります。それぞれが、さまざまな地域やブランド向けのソフトウェア バンドルを構築しています。

私の前任者の何人かは、使用するパラメーター/プロパティの情報をターゲットに提供するという問題に対処しました。

これらのエントリは、各ターゲットで数回発生し、一部の値は、プロパティが既に読み込まれて使用可能になっている場合でも、追加/ハードコードされていました。このアプローチは非常にエラーが発生しやすいです。

これは、名前のタイプミスにより、ターゲットが各ターゲットに指定されたものではなく、さまざまなプロパティの組み合わせを使用するようになるため、非常に面倒でした。場合によっては、明らかに怠惰が成功したため、検索する代わりに、適切なバリアント プロパティ ファイルを開いて修正することは、1 つのタスクに使用される別のファイルに過ぎませんでした。

各ターゲットが最初にプロパティ ファイル名を 1 つだけ必要とし、残りは (必要に応じて) 実行時に構成されるようにスクリプトを調整しました。

ここまではうまくいきましたが、プロパティ ファイルがメイン ターゲットで読み込まれていないため、以前は複数のターゲットを連続してビルドできました。

フォローアップターゲットが最初のターゲットからロードされた初期プロパティを使用するため、各ターゲットを段階的に構築する必要があります。

プロパティファイルをロードするさまざまな方法で試してみましたが、変数で上書きしましたが、これまでのところ喜びはありません。< loadproperties >、< property file=... >、< propertyfile ... >を試しましたが、同じ名前の変数を使用してトリックを実行して設定を解除しない限り、プロパティを上書きできないため、実際には役に立ちませんでした。この特定の時点では機能しません。外部から送信されたプロパティは、開始時に値を初期化する必要があり、ビルドする前に使用される値がわからないため、無視されます。

プロパティファイルを通常のテキストファイルとして1行ずつ読み取り、関連するエントリを検索して個々の変数に割り当てるとうまくいくと思いましたが、これを達成する方法がわかりません:/

誰かがこれで私を助けてくれることを願っています。メインターゲットがどのように見えるかの例は、投稿の最後に添付されています. テキスト (キー = 値) から値を読み取り、それらを変数に割り当てたい場所は、条件の直後です。

乾杯ジャン

<target name="Int_XX_XX_XX" description="Create XX XX release (PCSim, Front, XX)">
    <condition property="skip.target">
        <istrue value="${skip_target}" />
    </condition>
    <loadproperties>
        <file file="variants/XX_XXXXXX_XX.properties"/>
    </loadproperties>
    <propertyregex property="sop.number" select="\2" input="${variant.release.label}" regexp="(\.*)_(SOP[0-9]*)" />
    <if>
        <or>
            <and>
                <available file="${variant.release.label}${variant.sub.region}.zip" />
                <istrue value="${variant.split.to.region}" />
            </and>
            <and>
                <available file="${variant.release.label}.zip" />
                <isfalse value="${variant.split.to.region}" />
            </and>
        </or>
        <then>
            <var name="bundle.exists" value="true" />
            <echo>${variant.release.label}.zip found. Skipping build target</echo>
        </then>
    </if>
    <if>
        <not>
            <istrue value="${bundle.exists}" />
        </not>
        <then>
            <echo>${variant.release.label}.zip not found. Accessing build target</echo>
            <antcall target="private.create.zip.and.pcsim">
                <param name="zip.dsitracer.client.asia" value="true" />
                <param name="variant.properties" value="variants/${variant.label}.properties" />
                <param name="echo.release.labels" value="false" />
            </antcall>
            <antcall target="private.echo.release.labels">
                <param file="variants/${variant.label}.properties" />
            </antcall>
            <antcall target="private.send.email.to.testers">
                <param name="variant.release.label" value="${variant.release.label}" />
                <param file="variants/${variant.label}.properties" />
            </antcall>
        </then>
    </if>
    <var name="bundle.exists" unset="true" />
</target>
4

1 に答える 1

0

それは魅力のように機能します:)

プロパティ値の初期割り当てを削除する必要がありました

<property name="foo" value="foo"/>

メインターゲットによって呼び出される同じスクリプトにいくつかのターゲットがあるため、taskdef の直後。その結果、値が foo に戻されたプロパティ値が再度読み取られました。初期化を破棄しても害はないようです。

したがって、私のビルドスクリプトには次のものが追加されています。

<target name="Int_XX_XX_XX" description="Create XX XX release (PCSim, Front, XX)">
    <condition property="skip.target">
        <istrue value="${skip_target}" />
    </condition>
    <local name="variant.property.file.name" />
    <local name="variant.release.label" />
    <local name="variant.sub.region" />
    <local name="variant.split.to.region" />
    <local name="variant.label" />
    <local name="variant.label.extended" />
    <property name="variant.property.file.name" value="XX_XXXXXX_XX" />
    <loadproperties>
        <file file="variants/${variant.property.file.name}.properties" />
    </loadproperties>

それ以外の

    <target name="Int_XX_XX_XX" description="Create XX XX release (PCSim, Front/Rear, XX)">
    <condition property="skip.target">
        <istrue value="${skip_target}" />
    </condition>
    <loadproperties>
        <file file="variants/XX_XXXXXX_XX.properties" />
    </loadproperties>

ところで

        <local name="variant.release.label" />
    <local name="variant.sub.region" />
    <local name="variant.split.to.region" />
    <local name="variant.label" />
    <local name="variant.label.extended" />

これらのプロパティはメイン ターゲットでも使用されますが、サブレベルのターゲットは最近のプロパティ ファイルから読み取ったプロパティを使用し、後で期待どおりに破棄します。

助けてくれてありがとう:)

于 2012-08-24T14:28:11.337 に答える