2010-09-16 15 views
12

Ant ha qualche modo per eseguire manipolazioni di stringhe maiuscole/minuscole/captialize/uncaptialize? Ho guardato PropertyRegex ma non credo che gli ultimi due siano possibili. E 'qualcos'altro?Funzioni stringa ant?

+0

Consulta anche: http://stackoverflow.com/questions/7129672/uppercase-lowercase-capitalize-an-ant-property/7131195#7131195 –

risposta

0

si potrebbe utilizzare l'attività script e utilizzare un linguaggio di script JSR223 supportato come Javascript, JRuby, Jython, ... per fare la tua gestione

14

From this thread stringa, utilizzare un compito 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> 

uscita

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 

Aggiornamento per un commento di WarrenFaith per separare lo script in un altro bersaglio e passare una proprietà dal chiamata targetdi nuovo all'obiettivo chiamando

Usa antcallback dal vaso formica-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> 

e capitalise compito utilizza il passato in param1 così

<target name="capitalize"> 

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

uscita finale

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

Credo che questo funziona solo con jdk1.6 +. – kfox

+0

Sebbene sia più semplice con Java 6, funziona con Java 5, ma è necessario fornire un'implementazione del proprio linguaggio di scripting, ad es. Rhino per Javascript. –

+0

@JoseK: Sai come posso separare lo script in un target? Quando lo faccio, la proprietà è cambiata nel target, ma in seguito il vecchio valore viene ripristinato. Il mio problema è che voglio rendere l'obiettivo principale il più piccolo possibile in modo che anche i non programmatori possano modificare le proprietà. Grazie – WarrenFaith