1

有没有办法检查两个值是否相互相等而不管大小写?例如“myValue”等于“myvalue”不区分大小写。

<if>
    <equals arg1="myValue" arg2="myvalue" />
    <then>
        ...
    </then>
</if>
4

4 回答 4

7

ant-contrib 很烂。它通常会导致意大利面条式的代码非常难以阅读 - 并且需要人们添加 ant-contrib jars。
您通常最好让 ant 成为蚂蚁……它不是一种脚本语言,而是构建步骤的简单声明。如果你想变得花哨,你可以通过在 java 中编写你自己的任务来做到这一点,你将拥有一个 IDE、调试器和单元测试。

在 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。我什至会进一步误入歧途,说我永远不会制作新的 ant 文件(更喜欢 gradle 或 maven)有趣的阅读:

于 2013-01-09T17:55:11.633 回答
2

您可以casesensitive="false"像这样使用参数:

<if>
    <equals arg1="myValue" arg2="myvalue" casesensitive="false" />
    <then>
        ...
    </then>
</if>

来源:https ://ant.apache.org/manual/Tasks/conditions.html

于 2017-01-13T12:29:30.757 回答
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>
于 2013-01-08T21:11:21.220 回答
-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>

注意test引用您的 ant 项目名称。

或者,您可以寻找另一个 ant-contrib 函数propertyRegex。由于我没有找到一个工作示例如何利用它将字符串转换为大写或小写,我认为 javascript 是更好的选择。

于 2013-01-08T18:34:32.897 回答