gpt4 book ai didi

java - Ant - 如果条件 - 从外部数组/文件读取并将其与第一个参数进行比较

转载 作者:行者123 更新时间:2023-12-02 11:37:49 25 4
gpt4 key购买 nike

我正在尝试使用 ant 来构建针对各种条件的结构。我想根据他们所属的大陆来为地球和大陆上的所有国家行事

<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 个国家/地区 + 我想对语言使用 NOT、AND 和 OR 条件,这将导致非常大的文件,以后很难修改和维护。有没有办法通过将所有国家/地区排序为文件中的数组或列表并让 ant 从此文件中读取来最小化代码。外部文件:

North_America=["US","CA"]
Europe=["DE","GB","FR",...]
Asia=["JP","PL","CN",..]
AFRICA=[..]
South_America[..]

那么使用ant就会非常简单了:

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

我的问题不是如何在ant中加载或读取属性文件,而是如何从数组或列表中读取值

<equals arg1="${country}" arg2="${Asia}" />

其中“Asia”是数组(或列表),问题是如果第一个参数等于该数组的任何值,是否可以在 ant 中实现这样的 IF 条件?或者即使有更好的方法来完成这项任务。

最佳答案

Ant 属性始终是字符串,因此无法真正存储或读取数组(或任何其他类型的对象)。

幸运的是,对于您的问题,国家/地区缩写始终以唯一的 2 个字母字符串的形式出现,因此只需从存储为一个长字符串的逗号分隔列表中读取它们即可轻松可靠地完成。

如果可能的话,我建议完全放弃 ant-contrib。有时您的脚本需要 for 循环,并且确实没有其他方法可以解决它,但如果您只是处理一堆条件,那么最好使用 native Ant。如果您好奇的话,我可以进一步详细说明。

关于国家/地区信息是否应该分组到构建脚本或属性文件中的问题,这只是一个选择问题。我个人更喜欢将数据存储在属性文件中,只留下脚本本身的逻辑。

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

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>

关于java - Ant - 如果条件 - 从外部数组/文件读取并将其与第一个参数进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48803212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com