我在脚本中有几个主要目标。他们每个人都为不同的地区和/或品牌构建软件包。
我的一些前任已经解决了一个问题,即为目标提供要使用的参数/属性的信息。
这些条目确实在每个目标中出现了几次,并且即使某个属性已经加载并且可用,也会添加/硬编码。这种方法很容易出错。
这导致了很多麻烦,因为名称中的拼写错误导致目标使用混合变体,而不是为每个目标指定的变体。 在某些情况下,显然懒惰显然是成功的,所以不是搜索,打开和修改适当的变体属性文件只是用于单个任务的不同。
我现在已经调整了脚本,每个目标在开始时只需要一个属性文件名,然后 - 如果需要 - 在运行时编写。
到目前为止很好但是之前可以连续构建多个目标,因为主目标中尚未读取属性文件。
现在必须逐步构建每个目标,因为后续目标将使用从第一个目标加载的初始属性。
我尝试了不同的加载属性文件的方法,用变量覆盖它但到目前为止没有任何乐趣。 我尝试了< 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>
答案 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" />
是主目标中也使用的属性,子级别上的目标确实使用从最近的属性文件中读取的属性,并在以后按预期丢弃它们。
感谢您的帮助:)