蚂蚁 - 如果条件 - 从外部数组/文件中读取并将其与第一个arg进行比较



我正在尝试使用蚂蚁来建立有关各种条件的结构。我想根据它们属于的大陆

为地球和大陆上的所有国家行事
<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>

相关内容

  • 没有找到相关文章

最新更新