在访问新目标时是否可以“卸载”/丢弃从文件中读取的属性?

时间:2012-08-22 10:37:20

标签: ant properties

好奇只是好奇......因为我 - 当然 - 想以这种方式实施它;)

我在脚本中有几个主要目标。他们每个人都为不同的地区和/或品牌构建​​软件包。

我的一些前任已经解决了一个问题,即为目标提供要使用的参数/属性的信息。

这些条目确实在每个目标中出现了几次,并且即使某个属性已经加载并且可用,也会添加/硬编码。这种方法很容易出错。

这导致了很多麻烦,因为名称中的拼写错误导致目标使用混合变体,而不是为每个目标指定的变体。 在某些情况下,显然懒惰显然是成功的,所以不是搜索,打开和修改适当的变体属性文件只是用于单个任务的不同。

我现在已经调整了脚本,每个目标在开始时只需要一个属性文件名,然后 - 如果需要 - 在运行时编写。

到目前为止很好但是之前可以连续构建多个目标,因为主目标中尚未读取属性文件。

现在必须逐步构建每个目标,因为后续目标将使用从第一个目标加载的初始属性。

我尝试了不同的加载属性文件的方法,用变量覆盖它但到目前为止没有任何乐趣。 我尝试了< loadproperties >,< 属性文件= ... >,< 属性文件... >一切都没有真正的帮助,因为属性不能被覆盖,除非你使用相同名称的变量并取消设置它,这在这个特定的点上不起作用。 从外面发送的属性将被忽略,因为我必须在开始时初始化值,并且我不知道在构建之前将使用哪个值。

我认为逐行读取属性文件作为普通文本文件,搜索相关条目并将它们分配给各个变量就可以了,但我无法弄清楚如何实现这个目的: /

我希望有人可以帮助我。 主目标如何看起来的一个例子附在帖子的末尾。 我希望从文本(key = value)中读取值并将它们分配给变量的位置直接在条件之后。

干杯 扬

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

1 个答案:

答案 0 :(得分: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" />

是主目标中也使用的属性,子级别上的目标确实使用从最近的属性文件中读取的属性,并在以后按预期丢弃它们。

感谢您的帮助:)