2010-09-16 16 views
12

¿Ant tiene alguna forma de hacer cadenas mayúsculas/minúsculas/capturar/descapitalizar las manipulaciones de cadenas? Miré a PropertyRegex pero no creo que los dos últimos sean posibles con eso. ¿Eso es algo más?¿Funciones de cuerdas de hormiga?

+0

Ver también: http://stackoverflow.com/questions/7129672/uppercase-lowercase-capitalize-an-ant-property/7131195#7131195 –

Respuesta

0

se podía utilizar la tarea script y utilizar un lenguaje de script jsr223-apoyado como JavaScript, jruby, jython, ... para hacer su manejo

14

From this thread cadena, utilice una tarea Ant <script>:

<target name="capitalize"> 
    <property name="foo" value="This is a normal line that doesn't say much"/> 

    <!-- Using Javascript functions to convert the string --> 
    <script language="javascript"> <![CDATA[ 

     // getting the value 
     sentence = project.getProperty("foo"); 

     // convert to uppercase 
     lowercaseValue = sentence.toLowerCase(); 
     uppercaseValue = sentence.toUpperCase(); 

     // store the result in a new property 
     project.setProperty("allLowerCase",lowercaseValue); 
     project.setProperty("allUpperCase",uppercaseValue); 

    ]]> </script> 

    <!-- Display the values --> 
    <echo>allLowerCase=${allLowerCase}</echo> 
    <echo>allUpperCase=${allUpperCase}</echo> 
</target> 

salida

D:\ant-1.8.0RC1\bin>ant capitalize 
Buildfile: D:\ant-1.8.0RC1\bin\build.xml 

capitalize: 
    [echo] allLowerCase=this is a normal line that doesn't say much 
    [echo] allUpperCase=THIS IS A NORMAL LINE THAT DOESN'T SAY MUCH 

BUILD SUCCESSFUL 

actualización para hacer comentarios de WarrenFaith para separar la secuencia de comandos en otro objetivo y pasar una propiedad de la llamada de destinovolver al objetivo de llamar

Uso antcallback de la jarra hormiga-contrib

<target name="testCallback"> 
    <antcallback target="capitalize" return="allUpperCase"> 
     <param name="param1" value="This is a normal line that doesn't say much"/> 
    </antcallback> 
    <echo>a = ${allUpperCase}</echo> 
</target> 

y capitalise tarea utiliza la aprobada en param1 tanto

<target name="capitalize"> 

     <property name="foo" value="${param1}"/> 

salida final

[echo] a = THIS IS A NORMAL LINE THAT DOESN'T SAY MUCH 
+0

Creo que esto solo funciona con jdk1.6 +. – kfox

+0

Aunque es más fácil con Java 6, funciona con Java 5, pero debe proporcionar una implementación de su lenguaje de scripts, por ejemplo, Rhino para Javascript. –

+0

@JoseK: ¿Sabes cómo puedo separar el script en un objetivo? Cuando hago eso, la propiedad cambia en el objetivo, pero luego se restablece el valor anterior. Mi problema es que quiero que el objetivo principal sea lo más pequeño posible para que incluso los no programadores puedan cambiar las propiedades. Gracias – WarrenFaith