Ant 有没有可能;“卸载”/是否在访问新目标时放弃从文件读取的属性?

Ant 有没有可能;“卸载”/是否在访问新目标时放弃从文件读取的属性?,ant,properties,Ant,Properties,我只是好奇。。。因为我——当然——想以这种方式实施;) 我在脚本中有几个主要目标。他们每个人都为不同的地区和/或品牌构建软件包 我的一些前辈已经解决了一个问题,即向目标提供要使用哪些参数/属性的信息 这些条目确实在每个目标和一些添加/硬编码的值中出现过多次,即使属性已经加载并可用。这种方法很容易出错 这导致了很多麻烦,因为名称中的拼写错误导致目标使用变体属性的混合,而不是为每个目标指定的属性。 在某些情况下,lazyness显然成功了,因此,打开和修改相应的变量属性文件并不是用于单个任务的另一个

我只是好奇。。。因为我——当然——想以这种方式实施;)

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

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

这些条目确实在每个目标和一些添加/硬编码的值中出现过多次,即使属性已经加载并可用。这种方法很容易出错

这导致了很多麻烦,因为名称中的拼写错误导致目标使用变体属性的混合,而不是为每个目标指定的属性。 在某些情况下,lazyness显然成功了,因此,打开和修改相应的变量属性文件并不是用于单个任务的另一个文件,而是搜索、打开和修改相应的变量属性文件

我现在修改了脚本,每个目标在开始时只需要一个属性文件名,其余的在运行时编写(如果需要)

到目前为止还不错,但早些时候,由于主目标中没有读取属性文件,所以可以在一行中构建多个目标

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

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

我认为将属性文件作为普通文本文件逐行读取、搜索相关条目并将其分配给各个变量会起到作用,但我不知道如何实现这一点:/

我希望有人能帮我。 主目标的外观示例附在帖子的末尾。 我想要从文本(key=value)中读取值并将其分配给变量的位置直接位于条件之后

干杯 一月


找到${variant.release.label}.zip。跳过生成目标
未找到${variant.release.label}.zip。访问构建目标
它就像一个符咒:)

我必须删除财产价值的初始分配

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

如果主目标中也使用了属性,则子级别上的目标会使用从最近的属性文件读取的属性,并在以后按预期放弃这些属性


谢谢你的帮助:)

试试。。。有帮助吗?我没用过它。。。只是在阅读文档时才知道。它应该可以工作,但由于某些原因根本不能工作。。。我严格遵守Apacheorg的示例,并根据自己的目的对其进行了修改,但没有任何运气。“create release.xml:16:问题:无法创建任务或类型本地原因:名称未定义。操作:检查拼写。操作:检查是否已声明任何自定义任务/类型。操作:检查是否已执行任何自定义任务/类型声明。”然后,我简单地将示例复制并粘贴到脚本中,结果相同。它至少失败了。同时,给它赋值并没有带来任何乐趣。本例中未使用ant-contrib,但它是系统的一部分。所以这不可能是原因。它只适用于Ant 1.8或更高版本,我们使用Ant 1.8.2。我去了另一个部门,在不同的构建系统上运行交叉检查,设置大致相同。它在那里起作用了。。。那么有什么区别呢?我像他们一样在eclipse中运行它,但可能会有一些变化导致这种行为?他们运行Ant 1.8.1,I 1.8.2。Ant contrib:它们为0.3,I为0.3(即使在这种情况下未使用)
        <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" />