2012-10-10 36 views
7

Actualmente entiendo que podemos usar org.apache.tools.ant.filters.ReplaceTokens para reemplazar el contenido de un archivo durante la construcción de la siguiente manera.Gradle: Reemplazar tokens encontrando los tokens del archivo de propiedades

myBeans.xml:

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

my.properties:

myprop=testme 

archivo Gradle:

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

Sin embargo, yo querría Gradle para encontrar los nombres de las propiedades del archivo y my.properties reemplácelo en el archivo xml (sin mencionar myprop en el filtro). Si no, tendría que agregar todos los PlaceHolders manualmente.

Gracias de antemano

Respuesta

18

que pueden pasar propiedades como un mapa para la configuración replaceTokens. La clave debe coincidir con el token que desea ver reemplazado. Ejemplo:

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) 
} 

esperanza de que ayudó.

aplausos, René

+1

el clavo !! Muchas gracias. – Chris

+2

'import org.apache.tools.ant.filters.ReplaceTokens' fue la solución para mí, ¡gracias! –

+0

Usando esto, si necesitamos reemplazar el build.xml existente, está vaciando el archivo. ¿Alguna forma de lograrlo correctamente? Usando en (a otra carpeta), está copiando correctamente con el contenido reemplazado. – cypronmaya

Cuestiones relacionadas