有没有办法检查两个值是否相等,无论情况如何?例如,“myValue”等于“myvalue”不区分大小写。
<if>
<equals arg1="myValue" arg2="myvalue" />
<then>
...
</then>
</if>
答案 0 :(得分:7)
在ant中,您可以使用<condition>
任务,特别是<equals>
和casesensitive="false"
来设置属性,然后根据该属性有条件地运行目标。例如,使用ant -Darg1="foo" -Darg2="foo"
<?xml version="1.0" encoding="utf-8"?>
<project name="condition" default="condition-true" basedir=".">
<condition property="strings-match">
<equals arg1="${arg1}" arg2="${arg2}" casesensitive="false"/>
</condition>
<target name="display-props">
<echo>"arg1 = ${arg1}"</echo>
<echo>"arg2 = ${arg2}"</echo>
<echo>"strings-match = ${strings-match}"</echo>
</target>
<target name="condition-true" depends="display-props" if="${strings-match}">
<echo>true</echo>
</target>
</project>
我知道这不能回答你的问题,特别是关于ant-contrib的问题。我甚至会误入歧途说我永远不会制作新的蚂蚁文件(更喜欢gradle或maven)有趣的阅读:
答案 1 :(得分:2)
您可以使用casesensitive="false"
参数,如下所示:
<if>
<equals arg1="myValue" arg2="myvalue" casesensitive="false" />
<then>
...
</then>
</if>
答案 2 :(得分:0)
我打赌你可以使用<matches>
条件来做到这一点。 <matches>
条件可以将字符串与正则表达式进行比较,并且可以不区分大小写。只需将与正则表达式匹配的字符串。
刚刚出头:
<property name="arg1" value="MY_VALUE"/>
<property name="arg2" value="my_value"/>
<if>
<matches
string="${arg1}"
pattern="^${arg2}$"
casesensitive="false">
<then>
<echo>${arg1} and ${arg2} are the same, but may differ in case</echo>
</then>
</if>
答案 3 :(得分:-1)
我不认为您可以在<if>
内执行此操作。但是,您可以添加一个小的JavaScript。
<script language="javascript">
<![CDATA[
// getting value for myValue
myValue = test.getProperty("myValue");
// TODO add some check here to handle empty property value
// convert to uppercase
valueUpper = myValue.toUpperCase();
// store the result in a new property
test.setProperty("myValue.upper",valueUpper);
]]>
</script>
<if>
<equals arg1="${myValue.upper}" arg2="MYVALUE" />
<then>
...
</then>
</if>
note :test
引用您的蚂蚁项目名称。
或者你可以寻找另一个ant-contrib函数propertyRegex
。由于我没有找到一个工作示例如何利用它将字符串转换为大写或小写,我认为javascript是更好的选择。