2012-10-10 14 views
7

Attualmente capisco che possiamo usare org.apache.tools.ant.filters.ReplaceTokens per sostituire il contenuto di un file durante la generazione nel modo seguente.Gradle: sostituisci token trovando i token dal file delle proprietà

myBeans.xml:

<bean id="mybean1" class="com.test.MyClass1" > 
    <property name="myprop1" value="@[email protected]" /> 
</bean> 

my.properties:

myprop=testme 

file di Gradle:

from file("myBeans.xml"), { 
    filter(ReplaceTokens, tokens: ["myproperty": project.properties["myprop"]]) 
} 

Tuttavia mi vorrebbe Gradle per trovare i nomi delle proprietà da my.properties di file e sostituirlo nel file xml (senza menzionare myprop nel filtro). In caso contrario, dovrei aggiungere tutti gli PlaceHolders manualmente.

Grazie in anticipo

risposta

18

si possono passare le proprietà come una mappa alla configurazione replaceTokens. La chiave deve corrispondere al token che vuoi vedere sostituito. Esempio:

beans.xml:

<bean id="mybean1" class="com.test.MyClass1" > 
    <property name="myprop1" value="@[email protected]" /> 
</bean> 

my.properties:

myproperty=testme 

build.gradle:

task myCopy(type:Copy){ 
    from "bean.xml" 
    into ("$buildDir/beans") 
    def myProps = new Properties() 
    file("my.properties").withInputStream{ 
     myProps.load(it); 
    } 
    filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: myProps) 
} 

speranza che ha aiutato.

applausi, René

+1

Spot on !! Grazie mille. – Chris

+2

'import org.apache.tools.ant.filters.ReplaceTokens' è stata la soluzione per me, grazie! –

+0

Usando questo, se abbiamo bisogno di sostituire lo stesso build.xml, vuol dire che sta svuotando il file. Un modo per raggiungerlo correttamente? Usando in (in un'altra cartella), copia correttamente con il contenuto sostituito. – cypronmaya

Problemi correlati