Ant-Contrib等于忽略大小写

时间:2013-01-08 15:13:34

标签: ant ant-contrib

有没有办法检查两个值是否相等,无论情况如何?例如,“myValue”等于“myvalue”不区分大小写。

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

4 个答案:

答案 0 :(得分:7)

contrib-sucks。它通常导致意大利面条代码真的很难读 - 并且需要人们添加ant-contrib罐子 你通常最好让ant成为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的问题。我甚至会误入歧途说我永远不会制作新的蚂蚁文件(更喜欢gradle或maven)有趣的阅读:

答案 1 :(得分:2)

您可以使用casesensitive="false"参数,如下所示:

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

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

答案 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是更好的选择。