我正在尝试使用蚂蚁来建立有关各种条件的结构。我想根据它们属于的大陆
为地球和大陆上的所有国家行事<if>
<or>
<equals arg1="${country}" arg2="US" />
<equals arg1="${country}" arg2="CA" />
</or>
<then>
<!-- do stuff -->
</then>
<elseif>
<or>
<equals arg1="${country}" arg2="DE" />
<equals arg1="${country}" arg2="AT" />
<equals arg1="${country}" arg2="FR" />
<equals arg1="${country}" arg2="NL" />
<equals arg1="${country}" arg2="SE" />
<equals arg1="${country}" arg2="ES" />
..
</or>
<then>
<!-- do stuff -->
</then>
</elseif>
<elseif>
<or>
<equals arg1="${country}" arg2="JP" />
<equals arg1="${country}" arg2="KR" />
<equals arg1="${country}" arg2="AU" />
<equals arg1="${country}" arg2="SA" />
<equals arg1="${country}" arg2="PL" />
<equals arg1="${country}" arg2="CN" />
..
</or>
<then>
<!-- do stuff -->
</then>
</elseif>
</if>
现在,如果您可以想象有200个国家/地区 我不想使用,以及///或条件,也适用于将导致非常庞大的文件的语言,这将很难修改和以后维护。是否可以通过将所有国家/列表排序文件中的所有国家/列表来最大程度地减少代码,并让Ant从该文件中读取。外部文件:
North_America=["US","CA"]
Europe=["DE","GB","FR",...]
Asia=["JP","PL","CN",..]
AFRICA=[..]
South_America[..]
那么使用这样的蚂蚁将非常简单:
<if>
<equals arg1="${country}" arg2="${North_America}" />
<then>
<!-- do stuff -->
</then>
<elseif>
<equals arg1="${country}" arg2="${Asia}" />
<then>
<!-- do stuff -->
</then>
</elseif>
<elseif>
<equals arg1="${country}" arg2="${Africa}" />
<then>
<!-- do stuff -->
</then>
</elseif>
..
</if>
我的问题不是如何加载或读取蚂蚁中的属性文件,而是如何从数组或列表中读取值
<equals arg1="${country}" arg2="${Asia}" />
其中的"亚洲"是数组(或列表(,以及如果第一次arg等于该数组的任何值,则可以在ANT中实现蚂蚁的问题?或即使有更好的方法来完成此任务。
蚂蚁属性始终是字符串,因此无法真正存储或读取数组(或任何其他类型的对象(。
幸运的是,对于您的问题,乡村缩写总是以独特的2个字符串的形式出现,因此,只需从存储的一个长字符串的逗号界列表中读取它们,就可以轻松,可靠地完成。
如果可能的话,我建议完全抛弃蚂蚁contrib。有时,您会有一个需要for
循环的脚本,而实际上没有其他方法,但是如果您只是处理一堆有条件的条件,那么使用本机蚂蚁是更好的练习。如果您很好奇,我可以进一步详细说明。
关于该国家信息是否应在您的构建脚本或属性文件中分组的问题,这只是选择问题。我个人更喜欢将数据存储在属性文件中,仅留下逻辑本身。
大洲。
continent_southAmerica=AR,BR
continent_NorthAmerica=US,CA
continent_Asia=PL,SY,JP,SA,CN
continent_Africa=EG,TU,SU,MR,Ly
continent_Europe=FR,Nl,DE,DK,GB
build.xml
<fail message="Please specify a country. (-Dcountry=US)">
<condition>
<not>
<isset property="country" />
</not>
</condition>
</fail>
<property file="continents.properties" />
<target
name="build"
depends="
north-america-stuff,
south-america-stuff,
asia-stuff,
africa-stuff,
europe-stuff"
>
<echo message="Build complete for ${country}, ${continent}." />
</target>
<target name="init-continent">
<condition property="continent.is.north.america">
<contains string="${continent_NorthAmerica}" substring="${country}" />
</condition>
<condition property="continent.is.south.america">
<contains string="${continent_SouthAmerica}" substring="${country}" />
</condition>
<condition property="continent.is.asia">
<contains string="${continent_Asia}" substring="${country}" />
</condition>
<condition property="continent.is.africa">
<contains string="${continent_Africa}" substring="${country}" />
</condition>
<condition property="continent.is.europe">
<contains string="${continent_Europe}" substring="${country}" />
</condition>
</target>
<target name="north-america-stuff" if="continent.is.north.america" depends="init-continent">
<property name="continent" value="North America" />
<echo message="Continent: ${continent}" />
</target>
<target name="south-america-stuff" if="continent.is.south.america" depends="init-continent">
<property name="continent" value="South America" />
<echo message="Continent: ${continent}" />
</target>
<target name="asia-stuff" if="continent.is.asia" depends="init-continent">
<property name="continent" value="Asia" />
<echo message="Continent: ${continent}" />
</target>
<target name="africa-stuff" if="continent.is.africa" depends="init-continent">
<property name="continent" value="Africa" />
<echo message="Continent: ${continent}" />
</target>
<target name="europe-stuff" if="continent.is.europe" depends="init-continent">
<property name="continent" value="Europe" />
<echo message="Continent: ${continent}" />
</target>
在询问和重新思考后,我发现最好的是创建新的属性文件,并在其中添加值的polation properties properties promities promities profiles promity profies promity profe profe profe profe ant ant脚本。同样,我使用的"等于arg"条件不是使用"等于arg"条件。
contonent.properties文件
continent_southAmerica="AR", "BR"...
continent_NorthAmerica="US", "CA"
continent_Asia="PL", "SY", "JP", "SA", "CN",....
continent_Africa="EG", "TU", "SU", "MR", "Ly",....
continent_Europe="FR", "Nl", "DE", "DK", "GB",....
蚂蚁脚本
<!-- load continent.properties file -->
<loadproperties srcfile="../${continent.properties}" encoding="UTF-8">
<filterchain>
<escapeunicode />
</filterchain>
</loadproperties>
<if>
<contains string="${continent_southAmerica}" substring="${country}" />
<then>
<!-- do stuff -->
</then>
<elseif>
<contains string="${continent_Asia}" substring="${country}" />
<then>
<!-- do stuff -->
</then>
</elseif>
<elseif>
<contains string="${continent_Europe}" substring="${country}" />
<then>
<!-- do stuff -->
</then>
</elseif>
..
</if>