In Ant, how can I test if a property ends with a given value?

风格不统一 提交于 2019-12-24 02:52:23

问题


In Ant, how can I test if a property ends with a given value?

For example

 <property name="destdir" 
     value="D:\FeiLong Soft\Essential\Development\repository\org\springframework\spring-beans" />

how can I test if ${destdir} ends with "spring-beans"?

additional:

In my ant-contrib-1.0b3.jar, without 'endswith' task~~


回答1:


As Matteo, Ant-Contrib contains a lot of nice stuff, and I use it heavily.

However, in this case can simply use the <basename> task:

<basename property="basedir.name" file="${destdir}"/>
<condition property="ends.with.spring-beans">
   <equals arg1="spring-beans" arg2="${basedir.name}"/>
<condition>

The property ${ends.with.spring-beans} will contain true if ${destdir} ends with string-beans and false otherwise. You could use it in the if or unless parameter of the <target> task.




回答2:


You can test if ${destdir} ends with "spring-beans" like this (assuming you have ant-contrib, and are using Ant 1.7 or later).

<property name="destdir" value="something\spring-beans" />
<condition property="destDirHasBeans">
  <matches pattern=".*spring-beans$" string="${destdir}" /> 
</condition>
<if>
  <equals arg1="destDirHasBeans" arg2="true" />
  <then>
      $destdir ends with spring-beans ...
  </then>
  <else> ...
  </else>
</if>

The '$' in the regex pattern ".*spring-beans$" is an anchor to match at the end of the string.




回答3:


You can use the EndWith condition from Ant-Contrib

<endswith string="${destdir}" with="spring-beans"/>

For example

<if>
    <endswith string="${destdir}" with="spring-beans"/>
    <then>
        <!-- do something -->
    </then>
</if>

Edit

<endswith> is part of the Ant-Contrib package that has to be installed and enabled with

<taskdef resource="net/sf/antcontrib/antlib.xml"/>



回答4:


The JavaScript power can be used for string manipulation in the ANT:

<script language="javascript"> <![CDATA[

        // getting the value for property sshexec.outputproperty1
        str = project.getProperty("sshexec.outputproperty1");

        // get the tail , after the separator ":"
       str = str.substring(str.indexOf(":")+1,str.length() ).trim();

        // store the result in a new property
        project.setProperty("res",str);


    ]]> </script>
<echo message="Responce ${res}" />


来源:https://stackoverflow.com/questions/13649729/in-ant-how-can-i-test-if-a-property-ends-with-a-given-value

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!